示例代码:
var functions = {
testFunction: function(){
console.log('test');
}
};
var functionsClones = [];
for(i in [1,2,3]){
var functionsClone = $.extend({}, functions);
functionsClone.testFunction.i = i;
functionsClones.push(functionsClone);
}
$ .extend 是jQuery函数,它允许克隆对象而不是复制对象。
现在让我们打印设置属性:
$.each(functionsClones, function(key, functionsClone){
console.log(functionsClone.testFunction.i);
});
它输出3次'2'而不是0,1,2。这段代码出了什么问题?
答案 0 :(得分:2)
因为您在同一个i
对象(恰好是一个函数)上设置了testFunction
。你不是在循环的每次迭代中都创建一个新函数。
因此,在循环结束时,函数testFunction
对象保存它接收的最后一个值。
因为JavaScript只提供对象的引用,而不是对象本身,所以不会复制。
要制作单独的副本,您需要在循环中创建该函数。