猿问
下载APP

不使用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()

 })


再睡一会就码
浏览 156回答 2
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抽出去变成一个显式的函数调用,同样把值传进去即可。方案三说白了也一样,不过是在写法上靠近函数式而已。本质还是跟之前差不多。

qq_風

function printNum(num1,num2){     if(num1 > num2) return     while(num1<num2){ console.log(num1++)} } printNum(0,10)自己改改吧 😉
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答