在 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;
};
};