Closure in JavaScript

來源:互聯網
上載者:User
JavaScript中的函數:
      1.可以作為傳回值, 參數或變數的值.
      2.可以嵌套定義.
      3.函數內部能引用外部變數(嵌套範圍).
這樣就存在一個問題, 函數定義時(即執行個體化Function)的範圍鏈與函數執行時的範圍鏈可能不同. 閉包就是用來解決這個問題: 建立函數實際上是將引用環境和函數代碼打包成一個可執行實體.
Code:var test = function(i){
    var funArray = new Array();
    for (var j=0; j<i; j++)
    {
        funArray[j] = function(){
            alert(j);
        }
    }
    return funArray;
}

var dummy = test(3);
dummy[0](); // 輸出3
dummy[1](); // 也是輸出3
dummy[2](); // 也是輸出3

雖然建立3個(互相獨立的)閉包時 j 的值都不同, 但是打包的是同一個上下文, 因此輸出是一樣的.
Code:

function test(){
    var i = 1;
    var tmp1 = function(){
        alert(++i);
    }
    var tmp2 = function(){
        alert(++i);
    }
    tmp1(); //2
    tmp2(); //3
    return [tmp1, tmp2];
}

var arr = test();
arr[0](); //4
arr[1](); //5

閉包對外部變數的改變能反映到定義時的上下文, 並且能延長上下文中"正常"狀況下會消失的範圍的生命期

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.