(function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
provide({
getDayName: function(number) {
return names[number];
},
getDayNumber: function(name) {
for (var number = 0; number < names.length; number++) {
if (names[number] == name)
return number;
}
}
});
})();
show(getDayNumber("Wednesday"));
现在我正在阅读eloquentjavascript.net,我在那里找到了这样的模块模式。 但是我发现它有点令人困惑,所以你能解释一下为什么我们需要把它放在我们的函数之后 - &gt;()。据我所知,这是让它自我调用。 但为什么我们需要让它自我调用?
第二个问题为什么我们需要将我们的函数放在括号(function
)()中.Is ii just syntaxis?
答案 0 :(得分:3)
立即调用函数的重点是双重的:首先,最明显的是,它们立即调用自己。其次,函数中定义的所有变量都封装在该函数中。
例如:
(function () {
var foo = "bar";
window.bar = foo;
})();
执行此功能后,bar
将可在函数外部访问,但foo
不会。
至于将函数括在括号中,这会导致函数被视为表达式,然后可以执行该表达式。
( function (a) { console.log(a); } ) ("foo");
在上面,将记录“foo”。如果没有括号,您将收到语法错误。
修改强>
值得注意的是,您可以使用(并偶尔会看到)!function
代替(function)
来使该函数成为表达式:
!function () {}();
与
相同(function () {})();
除了将返回值转换为布尔值之外,布尔值被否定,但在大多数情况下都会被忽略。