var funcs=[];for(var i=0;i<10;i++){ funcs.push(function(){console.log(i)})}funcs.forEach(function(func){ func() })
6 回答
橋本奈奈未
TA贡献436条经验 获得超108个赞
var funcs=[]; for(var i=0;i<10;i++){ (function(i) { funcs.push(function(){console.log(i)}) })(i); } funcs.forEach(function(func){ func() })
二、
var funcs=[]; function pushFun(i) { funcs.push(function() { console.log(i) }) } for(var i=0;i<10;i++){ pushFun(i); } funcs.forEach(function(func){ func() })
三、
var funcs=[]; function logIndex(i) { return function() { console.log(i); } } for(var i=0;i<10;i++){ funcs.push(logIndex(i)); } funcs.forEach(function(func){ func() })
首先,你要先理解为什么不用let就不能输出0-9,或者说为什么需要let才能输出0-9;知道了根本问题才有办法去解决。
方案一应该是网上最多提到的方式,就是使用一个IIFE来将让变量有类似let一样的块级作用域的效果,因为ES6之前也就是ES5,JS只有全局作用域和函数作用域,一旦你的函数中有i这个变量,那么实际上console.log打印出的i是当时传入该函数中的值,就不再是外部for循环最后的值了。
方案二不过是方案一的变种,理论上是一个东西,把IIFE抽出去变成一个显式的函数调用,同样把值传进去即可。
方案三说白了也一样,不过是在写法上靠近函数式而已。本质还是跟之前差不多。
qq_風
TA贡献2条经验 获得超0个赞
function printNum(num1,num2){ if(num1 > num2) return while(num1<num2){ console.log(num1++)} } printNum(0,10)
自己改改吧 ?
添加回答
举报
0/150
提交
取消