今天做一个循环想得到1,2,3...10的输出结果。自己写的放弃了,然后看到了这么一个方案,但不是很理解,不知道自己哪一方面知识的欠缺,求大神解答!!!varfuncs=[];for(vari=0;i
1 回答

侃侃尔雅
TA贡献1801条经验 获得超16个赞
其实前面有几位兄台已经说得很清楚了。我这里就再通俗地解释一下。首先看下失败的代码:varfuncs=[]for(vari=0;i<3;i++){funcs.push(function(){console.log(i)})}funcs[0]()//3funcs[1]()//3funcs(2)()//3为什么这样呢?其实如果剥离掉for语句,以上代码会像这样子:varfuncs=[],i=0funcs.push(function(){console.log(i)})i++funcs.push(function(){console.log(i)})i++funcs.push(function(){console.log(i)})i++funcs[0]()//3funcs[1]()//3funcs[2]()//3为什么会输出上面的结果显而易见了吧。那么要达到所需要的要求怎么做呢?通常就在push方法中传入一个自执行函数,并且将i作为自执行函数的参数,以供作用于它内部。varfuncs=[],i=0funcs.push((function(i){returnfunction(){console.log(i)}}(i)))i++funcs.push((function(i){returnfunction(){console.log(i)}}(i)))i++funcs[0]()//0funcs[1]()//1现在还原到for语句的形式:varfuncs=[]for(vari=0;i<3;i++){funcs.push((function(i){returnfunction(){console.log(i)}}(i)))}//这里会依次输出0,1,2funcs.forEach(function(f){f()})Over~
添加回答
举报
0/150
提交
取消