gpt4 book ai didi

javascript - 使用函数和闭包简化创建模块

转载 作者:行者123 更新时间:2023-12-04 17:55:22 25 4
gpt4 key购买 nike

这是来自一本流行的 JS 书籍的示例,该书籍举例说明如何使用函数和闭包创建模块。简化后,示例如下所示

String.prototype.startify = function ( ) {
var startString = "Start ";
return function () { return startString + this;};
}();

console.log("Text".startify());

我的问题是,这似乎可以达到相同的结果,是否可以简化为以下内容?另外,返回一个函数并执行最后一个 () 的目的是什么?

String.prototype.startify = function ( ) {
var startString = "Start ";
return startString + this;
};

console.log("Text".startify());

最佳答案

最后一个 () 是调用函数。假设您有一个函数 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所说

Imagine var startString = "Start "; being a very complex expression. In your second snippet, that expression would need to run every time you use startify. In the first example, it only needs to run once.

这样做的另一个好处是变量 startString 不会污染文件的其余部分或全局变量,你只在特定的地方使用,这个变量只会存在于函数中“富”。

关于javascript - 使用函数和闭包简化创建模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com