再睡一會(huì)就碼
2019-08-18 17:26:24
var funcs=[];for(var i=0;i<10;i++){? ?? ?funcs.push(function(){console.log(i)})}funcs.forEach(function(func){? ?func()?})
6 回答
橋本奈奈未
TA貢獻(xiàn)436條經(jīng)驗(yàn) 獲得超108個(gè)贊
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,或者說(shuō)為什么需要let才能輸出0-9;知道了根本問(wèn)題才有辦法去解決。
方案一應(yīng)該是網(wǎng)上最多提到的方式,就是使用一個(gè)IIFE來(lái)將讓變量有類似let一樣的塊級(jí)作用域的效果,因?yàn)镋S6之前也就是ES5,JS只有全局作用域和函數(shù)作用域,一旦你的函數(shù)中有i這個(gè)變量,那么實(shí)際上console.log打印出的i是當(dāng)時(shí)傳入該函數(shù)中的值,就不再是外部for循環(huán)最后的值了。
方案二不過(guò)是方案一的變種,理論上是一個(gè)東西,把IIFE抽出去變成一個(gè)顯式的函數(shù)調(diào)用,同樣把值傳進(jìn)去即可。
方案三說(shuō)白了也一樣,不過(guò)是在寫法上靠近函數(shù)式而已。本質(zhì)還是跟之前差不多。
qq_風(fēng)
TA貢獻(xiàn)2條經(jīng)驗(yàn) 獲得超0個(gè)贊
function?printNum(num1,num2){
????if(num1?>?num2)?return
????while(num1<num2){?console.log(num1++)}
}
printNum(0,10)自己改改吧??
添加回答
舉報(bào)
0/150
提交
取消
