JavaScript - 在函数内部保存变量而不调用函数

Tom*_*man 1 javascript scope

有人可以用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.

我希望警报打印"它应该是什么",但不改变我从数组中调用函数的方式,即 - 没有参数.

我收到的提示:尝试定义一个调用另一个函数的函数.

请帮忙!!!谢谢 :-)

use*_*716 6

你收到的暗示有点欺骗性.你不想定义一个调用另一个的函数(你有同样的问题).相反,您想要定义一个返回另一个的.

示例: 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)