簡體   English   中英

通過功能和閉包簡化創建模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM