立即執行函數形成的閉包

閉包是js中比較難以理解的概念,今天在敲立即執行函數的時候突然有感,稍作分析,聊表心意

閉包的概念簡記

阮一峰的一篇文章講到了一種很淺顯易懂的理解:

閉包就是能夠讀取其他函數內部變量的函數

例如:

    function f1(){
    var n=999;
    function f2(){
      alert(n);
    }
    return f2;
  }
    
   n; //undefined
   var result = f1();
   result();//999

當然這種說法必要但是不充分,因為這種說法沒有包括這樣一種情況(作用域內)

    var obj = {
        a: 'a',
        showA: function() {
            console.log(this.a);
        }
    }

    obj.showA(); //'a'

所以更為確切的理解我覺得是:

閉包就是能夠讀取其他作用域內部變量的函數

立即執行函數內部形成的閉包

    (function(global) {
        var defaultOpts = {
            a: 'abc'
        };

        function Test() {
            this.options = defaultOpts;
        };

        Test.prototype = {
            showA: function() {
                console.log(this.options.a);
            }
        };

        global.Test = Test;

    })(this);

    defaultOpts; //undefined
    new Test().showA();//abc

defaultOpts作為立即執行函數中的局部變量,在外部直接訪問是訪問不到的,然而它并沒有在立即執行函數執行完成之后就消失,因為它在全局函數Test中被使用到了,它其實已經常駐內存了

so,遇到這樣的情況不要疑惑,因為這已經形成閉包了

After

coding過程中突然的自我~~
繼續搬磚去了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容