(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,我在那里发现了这样的模块模式。 但我发现它有点令人困惑,所以你能向我解释一下为什么我们需要把它放在我们的函数 ->() 之后。据我所知,这是为了使其 self 调用。 但为什么我们需要让它自调用呢?
第二个问题为什么我们需要将函数放在括号中 (function
) () 。ii 只是syntaxis 吗?
最佳答案
立即调用函数的要点有两个:首先,最明显的是,它们立即调用自身。其次,函数内定义的所有变量都封装在该函数内。
例如:
(function () {
var foo = "bar";
window.bar = foo;
})();
执行此函数后,可以在函数外部访问 bar
,但 foo
则不能。
至于将函数括在括号中,这会导致函数被视为表达式,然后可以执行该表达式。
( function (a) { console.log(a); } ) ("foo");
在上面,“foo”将被记录。如果没有括号,您将收到语法错误。
编辑
还值得注意的是,您可以使用(并且偶尔会看到)!function
而不是 (function)
来使函数成为表达式:
!function () {}();
与以下内容相同
(function () {})();
异常(exception)的是它将返回值转换为 bool 值,该值被取反,但在大多数情况下无论如何都会被忽略。
关于javascript - 模块模式或模块化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618425/