【发布时间】:2018-06-10 14:36:33
【问题描述】:
我有一个简单的函数,它的 for 循环中有另一个函数。主函数返回子函数。调用主函数时,循环运行,但子函数尚未执行,因为它尚未被调用。循环执行后调用子函数,因此i 的值指向数组最后一个元素的值。如果我希望它对数组中的每个值都有一个新的绑定,我该如何解决?
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();
【问题讨论】:
-
您的要求似乎没有意义。您对
getName()进行一次调用,它会返回一个稍后调用的函数。那个单一的调用怎么会有“对每个值的新绑定”?这是来自getName()的单个结果。也许你可以返回一个函数数组? -
你的代码甚至不能在严格模式下工作,就像functions are block-scoped。您返回的
sendName变量不存在。这是您更大问题的一部分:您的getName()仅返回一个函数。您甚至如何调用指向不同索引的不同函数(由于您在循环中使用了let,这实际上已经起作用了)。
标签: javascript jquery html closures