JavaScript中循环内调用函数的问题?

function constfuncs() {
    var funcs = [];
    var helper=function(e){
        alert(e);
    }
    for(var i = 0; i < 10; i+=1) {
        funcs[i] = helper(i) 
    }
    return funcs;
}
constfuncs()[0];

这段代码为什么会alert 10次?

阅读 4.6k
4 个回答

当你调用constfuncs函数的时候

    for(var i = 0; i < 10; i+=1) {
        funcs[i] = helper(i) 
    }

已经执行了10次啊。。 请注意helper(i)是函数调用 -.-
所以你的funcs返回的其实是是一个长度为10的数组,里面都是undefined,即helper函数的返回值

調用十次helper,為什麼不alert()十次?

funcs[i] = helper(i) 这个赋值语句中,helper(i)函数执行后的结果在赋值给funcs数组。如果你想通过变量的方式将函数存起来以便进行调用,可以通过下面的方式

function constfuncs() {
    var funcs = [];
    var helper=function(e){
        alert(e)
    }
    for(var i = 0; i < 10; i+=1) {
        funcs[i] = (function(i){ return helper.bind(this,i)})(i); 
    }
    return funcs;
}
constfuncs()[0]();  //输出0
constfuncs()[1]();  //输出1

for循环遍历十次i,helper(i)调用了十次;helper(i)函数执行后的结果在赋值给funcs数组,返回,所以alert十次。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题