gpt4 book ai didi

javascript闭包局部变量超出范围?

转载 作者:行者123 更新时间:2023-11-30 08:47:25 25 4
gpt4 key购买 nike

谁能给我解释一下下面代码中发生了什么?

function foo() {
var x = [-1, 2, 1];
setTimeout(function () {
console.log(x);
}, 3000);
return x;
}
var z = foo()
z[1] = 0;
console.log(z);

// result: [-1, 0, 1] and after 3 seconds [-1, 0, 1].

由于关闭,我期望第二个输出得到 [-1, 2, 1]。但我不是。是因为 x 比 foo() 长,我可以使用 z[1] = 0 更改它吗?请解释。

最佳答案

当一个函数返回一个数组或一个对象时,它实际上返回一个对它的引用,而不是像原始值那样返回一个副本。例如,如果 x 是数字、字符串或 bool 值,则您在函数外部所做的更改不会在函数内部产生影响。

如果您想返回数组的副本以获得预期的行为,您可以使用 slice方法。

function foo() {
var x = [-1, 2, 1];
setTimeout(function () {
console.log(x);
}, 3000);
return x.slice();
}

fiddle :http://jsfiddle.net/KbxMX/1/

关于javascript闭包局部变量超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com