考虑以下代码片段:
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中传递值的基本知识,如果有人可以向我说明其工作原理,将不胜感激。
干杯!
最佳答案
在第一个示例中,在调用asynch callBack时,newObject
对象可能没有相同的值,因为其范围仍在其父方法中,并且newObject
的主要值将由内部块使用。
但是,在第二个方法中,newObject
作为o
(新引用)传递给另一个方法,该方法在作用域内没有相同的变量,因为它不在for循环块中。