gpt4 book ai didi

javascript - Javascript 循环内的闭包

转载 作者:行者123 更新时间:2023-11-28 13:04:01 24 4
gpt4 key购买 nike

我有一个简单的函数,它的 for 循环中有另一个函数。主函数返回子函数。当主函数被调用时,循环运行,但子函数尚未执行,因为它尚未被调用。 sub 函数在循环执行后调用,因此 i 的值指向数组最后一个元素的值。如果我希望它对数组中的每个值都有一个新的绑定(bind),我该如何修复它?

function getName() {
const arr = ['a', 'b', 'c', 'd'];
for (let i = 0; i < arr.length; i++) {
function sendName() {
alert(arr[i]);
}
}
return sendName;
}
var receiveName = getName();
receiveName();

最佳答案

您可以使用bind函数来实现您想要的:

function sendName( name ) {
alert( name );
}

function getNames() {
const arr = [ 'a','b','c','d' ];
let sendNames = []; //Dunno what you want to do with this functions so let's store them in an array
for(let i = 0; i < arr.length; i++) {
sendNames.push(sendName.bind(this, arr[i])); // this - context, later arguments
}
return sendNames;
}
var receivedNames = getNames();
receivedNames[1](); //b
receivedNames[3](); //d

关于javascript - Javascript 循环内的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48034703/

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