gpt4 book ai didi

javascript - 生成的函数保留对变量的引用而不是值替换?

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

我对 javascript 的特定行为有疑问:

我有一个对象,我想用生成的函数填充它。每个函数都包含一个变量,该变量在函数生成的循环中发生变化。

我的问题是在将函数分配给对象时变量没有被替换。相反,对变量的引用保留在函数中,并且在执行函数时仅记住变量的最后一个值。

这是一个最小的例子(也在 jsfiddle 上:http://jsfiddle.net/2FN6K/):

var obj = {};
for (var i = 0; i < 10; i++){
var nr = i;
obj[i] = function(){
console.log("result: " + nr);
}
}

for (var x = 0; x < 10; x++){
obj[x]();
}

第二个循环执行所有生成的函数并打印 9 作为结果。但我希望他们打印变量在生成时的值(0、1、2、...)。

有没有办法做到这一点?提前致谢。

最佳答案

一种方法是调用一个返回函数的函数:

function makeFunc(i) {
return function() {
console.log("result: " + i);
}
}

for (...) {
obj[i] = makeFunc(i);
}

另一种方法是立即调用函数表达式:

for (i = 0; ...; ...) {
(function(i) {
obj[i] = function() {
console.log("result: " + i);
}
})(i);
}

在后一种情况下,(function(i) ... )(i) 导致 i 的永久绑定(bind)作为参数传递给外部函数内部函数范围内

关于javascript - 生成的函数保留对变量的引用而不是值替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17506658/

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