IIFE跟閉包的理解

一言不合,
翠花,
上酸菜!閉包

//隨便寫個函數哈
var arr=[];
for(var i=0;i<3;i++){
    arr[i]=function(){
        return i;
    }
}
//你猜會怎麼輸出
console.log(arr[0]());//3
console.log(arr[1]());//3
console.log(arr[3]());//3

哦,這是爲何呢?
奧,這個嘛,就是說的塊級做用域問題
下面開始迴歸正題:
其實你這樣寫,結果也是同樣:函數

var arr=[];
for(var i=0;i<3;i++){
    //留空
}
console.log(i)//太暴力了,也是3!

來看看IIFE跟閉包結合大法:code

var arr=[];
for(var i=0;i<3;i++){
    (function(i){
        arr[i].function(i){
            return i;
        }
    })(i);
}
console.log(arr[0]());//0
console.log(arr[1]());//1
console.log(arr[2]());//2

其實,搞了半天,有個更吊炸天的技能,
都沒想告訴你,知道爲何那麼多人喜歡ES6,
由於真的很是666:作用域

var arr=[];
for(let i=0;i<3;i++){
    arr[i]=function(){
        return i;
    }
}
//This is a Amazing world!
console.log(arr[0]());//0
console.log(arr[1]());//1
console.log(arr[2]());//2

var 要哭了,真的,怎麼能夠這樣,
卑鄙!下流!無恥!打碼
...io

相關文章
相關標籤/搜索