javascript閉包問題詳解

來源:互聯網
上載者:User

標籤:閉包   javascript   

之前看到一段代碼,很是不能理解,然後就尋找資料並且找網路上得大牛請教,最後弄懂了這段代碼,然後就拿出來總結一下。

1.挖坑

先來看一段代碼:

var arrTest = [];for (var i = 0; i < 3; i++) {    //注意函數沒有傳參數進入函數體    arrTest.push(function () {        console.log(‘>>>‘ + i);    })}//arrTest=[function(){console.log(‘>>>‘+i)}, function(){console.log(‘>>>‘+i)}, function(){console.log(‘>>>‘+i)}]console.log(arrTest[0].toString());  //function(){console.log(‘>>>‘,+i)}console.log(i);console.log(‘-------------‘);//長度可以使用l 簡單的單詞來代替,減小代碼長度for (var i = 0, arrLength = arrTest.length; i < arrLength; i++) {    console.log(i);    arrTest[i]();}//驗證的i的值console.log(‘i的值是‘ + i);     //i=3console.log(‘end for‘);for (var j = 0, arrLength = arrTest.length; j < arrLength; j++) {    console.log(j);    arrTest[j]();}arrTest = [function () { console.log(‘>>>‘ + i) }, function () { console.log(‘>>>‘ + i) }, function () { console.log(‘>>>‘ + i) }]

結果是這個樣子的:

那怎麼實現當遍曆整個函數的時候列印出我們所希望的0,1,2這樣的結果呢?

/*對函數進行改造,當執行迴圈的時候,列印0,1,2 */var arrTest1 = [];for (var i = 0; i < 3; i++) {    //構造一個立即執行的函數將函數的返回結果添加入數組中    (function(n) {        arrTest1.push(function() {            console.log(‘>>>‘ + n);        });    })(i);}console.log(arrTest1);for (var i = 0, l = arrTest1.length; i < l; i++) {    arrTest1[i]();}

列印結果:

javascript閉包問題詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.