为了账号安全,请及时绑定邮箱和手机立即绑定

不使用es6中的let,es5如何输出0-9?

/ 猿问

不使用es6中的let,es5如何输出0-9?

var funcs=[];

for(var i=0;i<10;i++){

   

   funcs.push(function(){console.log(i)})

}

funcs.forEach(function(func){

   func()

 })


查看完整描述

2 回答

?
橋本奈奈未
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抽出去变成一个显式的函数调用,同样把值传进去即可。

方案三说白了也一样,不过是在写法上靠近函数式而已。本质还是跟之前差不多。

查看完整回答
1 反对 回复 2019-08-18
?
qq_風
function printNum(num1,num2){		
    if(num1 > num2) return
    while(num1<num2){ console.log(num1++)}
}	
printNum(0,10)

自己改改吧 😉

查看完整回答
反对 回复 2019-08-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信