gpt4 book ai didi

Javascript:避免在涉及大量循环的代码中使用全局变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:36 24 4
gpt4 key购买 nike

我遇到了一个非常令人困惑的问题。我认为最好用代码来解释:

var length = 0; // I want to avoid this variable being global

function loop(array, func) {
for (var i = 0; i < array.length; i++) {
array[i].func(length);
length += array[i].number;
if (func) {
func();
}
}
}

function bar(number) {
this.func = function(len) {
console.log(len);
};
this.number = number;
}

function main() {
var array = [];
for (var j = 1; j < 3; j++) {
var foo = new bar(j);
array.push(foo);
}
loop(array, function() {
loop(array);
});
}

main();

我在其他一些代码中有一个与此类似的循环。我根本不知道如何在这段代码中使长度变量成为局部变量。我无法将它传递给函数,因为它会调用自身。我真的不能把它移到任何地方,因为循环总是把事情搞砸。

感谢您的帮助!

最佳答案

我假设您想在循环的连续函数调用之间保持长度值。你可以通过返回一个使用长度的闭包来做到这一点。因此,您可以像这样定义循环,而不是像现在这样:

const loop = (function() {
var length = 0;
return function (array, func) {
// Your current code for loop here
}
}) ();

基本上,它所做的是将循环指定为从另一个匿名函数调用返回的函数。这确保了 length 的值持续存在,因为它是在最终分配给 loop 的函数范围之外定义的,但在代码的其他任何地方都完全不可访问。

关于Javascript:避免在涉及大量循环的代码中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50959381/

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