我是javascript的新手,我可能先进入深渊。我在阅读js中的设计模式时遇到了以下定义。我不明白这里使用的语法,为什么“log”函数定义在“()”,
中var log = (function() {
var log = "";
return {
add: function(msg) { log += msg + "\n"; },
show: function() { alert(log); log = ""; }
}
})();
请指出正确的方向。
答案 0 :(得分:3)
如果没有括号,则赋值的右侧是函数表达式,并为日志分配对该(匿名)函数表达式的引用,以便稍后调用log()
。
如果包括括号,包装函数将变为自调用函数表达式(并立即执行),因此无论此函数调用返回,都会分配log
。
正如其他人已经说过的那样,您的代码显示了所谓的模块模式的示例。阅读更多相关信息here。
答案 1 :(得分:0)
我不明白这里使用的语法,为什么是“log”函数 “()”中的定义
它基本上是自动执行匿名函数。有几种方法可以编写这样的函数。
(function() {
alert('hi there');
})();
! function() {
alert('hello');
}();
+ function() {
alert('plus');
}();
- function() {
alert('minus');
}();
现在这样的函数也可以返回值:
var msg = (function() {
return 'hello';
})();
alert(msg);
var calc = (function() {
return {
add: function(a, b) {
return a + b;
},
sub: function(a, b) {
return a - b;
}
};
})();
alert(calc.add(4, 5));