var a = [false, 3];
console.info('a: '+a);
(function(item){
var jamie = item;
jamie [1]--;
console.info('jamie: '+jamie);
})(a);
console.info('a: '+a);
在我看来,a[1]
在此 javascript 中应始终等于 3。
当不使用数组时,它按预期工作:
var a = 3;
console.info('b: '+a);
(function(item){
var jamie = item;
jamie--;
console.info('jamie b: '+jamie);
})(a);
console.info('b: '+a);
为什么我运行这个 JS 后 a[1]
输出 2
? Fiddle of said problem :O
最佳答案
因为您提供的是对对象的引用,而不是按值传递它;
如果你想克隆对象,这里有一个有用的函数来允许它:
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
var a = [false, 3];
console.info(a); // [false, 3];
(function(item){
var jamie = clone(item);
jamie [1]--;
console.log(jamie); // [false, 2];
})(a);
console.info(a); // [false, 3];
关于javascript 闭包不适用于数组属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793798/