请考虑以下代码段:
for(var i = 0; i < arr.length; ++i) {
var newObject = new someFunction(arr[i]);
//async callback function
$http.get('someurl').then(
function(data) {
newObject.data = data;
}
);
}
VS
function registerCallbacks(o) {
$http.get('someurl').then(
function(data) {
o.data = data;
}
);
}
for(var i = 0; i < arr.length; ++i) {
var newObject = new someFunction(arr[i]);
registerCallbacks(newObject);
}
第一个示例仅对数组中的最后一个对象执行异步操作,而第二个示例将按预期工作。 据我所知,在第一个例子中,回调都引用了同一个变量'newObject',因此只对一个对象起作用。 但是为什么在第二个例子中也不是这样呢? “o”最终不会引用最后一个函数调用的参数吗?
我担心我错过了一些关于如何通过javascript传递价值的基本信息,如果有人能够阐明我的工作原理,我将不胜感激。
干杯!
答案 0 :(得分:2)
在第一个示例中,newObject
对象在调用asynch callBack时可能不具有相同的值,因为其范围仍然在其父方法中,并且newObject
的主要值将是由内部块使用。
然而,在第二个newObject
被传递给另一个方法o
(一个新的引用),它在范围内没有相同的变量,因为它超出了循环块的范围