gpt4 book ai didi

javascript - 循环中的变量 - 如何在我的情况下修复它?

转载 作者:行者123 更新时间:2023-12-03 07:29:49 25 4
gpt4 key购买 nike

我在函数内的循环中有一个变量:

function myHandler() {
for (var i = 0; i < items.length; i++) {
var currItem = items[i];

myObj.doSomething(function(data) {
console.log("ok");
console.log("My currItem id: " + currItem.id); // the last one of all in items
}, function(e) {
console.log("error");
console.log("My currItem id: " + currItem.id); // the last one of all in items
});
}

currItem.id console.log() 中的每次等于 items 中的最后一个项目。明显地。我尝试通过以下方式解决此问题:

function myHandler() {
for (var i = 0; i < items.length; i++) {
var currItem = items[i];
var currItem = (function(i2) {
return items[i2];
})(i);

myObj.doSomething(function(data) {
console.log("ok");
console.log("My currItem id: " + currItem.id); // the last one of all in items
}, function(e) {
console.log("error");
console.log("My currItem id: " + currItem.id); // the last one of all in items
});
}

但仍然没有成功。为什么以及如何解决它?

最佳答案

像这样使用闭包:

Inner function which is being returned will remember the environment in which it is created.

function myHandler() {
for (var i = 0; i < items.length; i++) {
var currItem = items[i];

myObj.doSomething((function(currItem) {
return function(data) {
console.log("ok");
console.log("My currItem id: " + currItem.id);
}
})(currItem), (function(currItem) {
return function(e) {
console.log("error");
console.log("My currItem id: " + currItem.id);
}
})(currItem));
}
}

或者:

使用[].forEach,因为每个迭代器回调都有自己的上下文,不会被下一次迭代覆盖。

关于javascript - 循环中的变量 - 如何在我的情况下修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35849706/

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