【发布时间】:2011-12-18 05:58:11
【问题描述】:
我应该已经正确理解了 Javascript 中的 Cloures,但我显然没有......
目前,我正在阅读的文本具有抽象 AJAX 调用的功能:
function request(url, callback){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = (function(myxhr){
return function(){
callback(myxhr);
}
})(xhr);
xhr.open('GET', url, true);
xhr.send('');
}
这是我的实际问题:我的大脑拒绝理解为什么这个不起作用:
function request(url, callback){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = callback(xhr);
xhr.open('GET', url, true);
xhr.send('');
}
我的意思是,以“我的”方式,我想象会发生的是我调用 say request('http://...', a_callback)。在 request() 中,创建了一个新的 xhr 对象,并将其分配给回调......它不会工作吗? (讨厌的)副作用是什么?根据我的(有限)理解,您需要闭包,例如在循环中您可能最终引用函数变量的最新值。但是这里...“var xhr=...”不是确保每次都创建一个新对象吗?
请解释为我的智商为 30(这可能是真的:D)
佣兵。
【问题讨论】:
-
请解释为好像我的智商为 30 - 你的问题听起来更像是“AJAX,你没有工作,请帮助,紧急!!!!!!1111”。
-
:-) 好吧,当我写这个问题时,我什至把“我的”例子弄错了,所以我想我用英语写作可以获得额外的分数,但仅此而已!
标签: javascript ajax closures