有人可以用JavaScript谜语帮我吗?
请考虑以下JavaScript代码:
var a[];
for (i=0;i<10;i++)
{
a[i] = function(){alert ("I am " + i);};
}
a[5]();
Run Code Online (Sandbox Code Playgroud)
很明显,最后一行会使警报显示"我是9",而不是"我是5",因为循环i结束时值为9 for.
我希望警报打印"它应该是什么",但不改变我从数组中调用函数的方式,即 - 没有参数.
我收到的提示:尝试定义一个调用另一个函数的函数.
请帮忙!!!谢谢 :-)
你收到的暗示有点欺骗性.你不想定义一个调用另一个的函数(你有同样的问题).相反,您想要定义一个返回另一个的.
示例: http ://jsfiddle.net/sX92Q/
var a = [];
for (i = 0; i < 10; i++) {
a[i] = alertFunc(i);
}
// return a function that closes around the proper value of "i"
function alertFunc(i){
return function() {
alert(i);
};
};
a[5]();
Run Code Online (Sandbox Code Playgroud)
这实际上与在循环中使用匿名函数的那些相同,但它更有效,因为匿名函数不需要在每次迭代时重建.
通常,您不希望在循环中创建重复的函数.
边注.在javascript中,这个:
var a[];
Run Code Online (Sandbox Code Playgroud)
应该:
var a = [];
Run Code Online (Sandbox Code Playgroud)