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

不使用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() })
查看完整描述

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

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

查看完整回答
1 反对 回复 2019-08-18
?
qq_風

TA贡献2条经验 获得超0个赞

function printNum(num1,num2){		
    if(num1 > num2) return
    while(num1<num2){ console.log(num1++)}
}	
printNum(0,10)

自己改改吧 ?

查看完整回答
反对 回复 2019-08-21
  • 6 回答
  • 0 关注
  • 2595 浏览
慕课专栏
更多

添加回答

举报

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