这是来自一本流行的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());
答案 0 :(得分:0)
最后一个()
正在调用该函数。想象一下,你有一个函数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”中。