gpt4 book ai didi

javascript 闭包不适用于数组属性?

转载 作者:行者123 更新时间:2023-11-30 10:15:44 26 4
gpt4 key购买 nike

 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] 输出 2Fiddle 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/

26 4 0
文章推荐: javascript - 是否可以检查用户是否启用了 JS 声音?
文章推荐: swift - 如何循环遍历子列表