[英]Simplifying creating modules with function and closure
這是來自流行的JS書籍的一個例子,該書例證了使用函數和閉包創建模塊。 簡化后,該示例如下所示
String.prototype.startify = function ( ) {
var startString = "Start ";
return function () { return startString + this;};
}();
console.log("Text".startify());
我的問題是,這可以減少到以下幾點,因為它似乎達到了相同的結果嗎? 返回函數和執行last()的目的是什么?
String.prototype.startify = function ( ) {
var startString = "Start ";
return startString + this;
};
console.log("Text".startify());
last ()
正在調用該函數。 想象一下,你有一個函數foo
function foo() { }
如果你想運行這個功能,你打電話
foo();
現在如果foo
返回一個函數
function foo() {
return function bar() {
};
}
你可以做
var bar = foo();
bar(); // bar is a function
在你的代碼中
String.prototype.startify = function ( ) { // foo
var startString = "Start ";
return function () { // bar
return startString + this;
};
}(); // () executes foo immediately
您正在運行函數“foo”並返回函數“bar”,然后將其存儲在變量String.prototype.startify
。
foo
只在這里調用一次,與你的第二個例子不同。
所以@Xufox說
想象一下
var startString = "Start ";
是一個非常復雜的表達。 在您的第二個代碼段中,每次使用startify時都需要運行該表達式。 在第一個示例中,它只需要運行一次。
此另一個優點是變量startString
不會污染文件的其余部分或全局使用僅在特定位置使用的變量,此變量將僅存在於函數“foo”中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.