天天看點

javascript 中的閉包

在 javascript 中,函數可以當做參數傳遞,也可以當做傳回值傳回。

當一個函數内部傳回值為一個函數時, 就形成了閉包。(閉包裡面的 this 問題)

如下面代碼

Function.prototype.after = function (action) {
    var func = this;
    return function () {
        var result = func.apply(this, arguments);
        action.apply(this,arguments);
        return result;
    };
};

var foo= function(a){
   console.log(a);
}

foo =  foo.after(function(){console.log(2)});
foo = foo.after(function(){console.log(3)});

foo(12);
      

  可以這樣了解: foo1 = foo.after(function(){console.log(2);});

          foo2 = foo1.after(function(){console.log(3);});

          foo2(12); // 當foo2(); 執行的時候,有點類似于遞歸, fun.apply(this.args);(這個裡面遞歸執行)  action();

          foo2() => foo1();  console.log(3);

                                                                           => foo();console.log(2);  console.log(3);

                                              => console.log(12); console.log(2); console.log(3);

    執行結果是: 12

                             2

           3

Function.prototype.after = function (action) {
    
    return function () {
        var result = this.apply(this, arguments);
        action.apply(this,arguments);
        return result;
    };
};
      

繼續閱讀