用括号括起来的javascript函数

时间:2015-06-03 08:44:56

标签: javascript iife

我是javascript的新手,我可能先进入深渊。我在阅读js中的设计模式时遇到了以下定义。我不明白这里使用的语法,为什么“log”函数定义在“()”,

var log = (function() {
    var log = "";
    return {
        add: function(msg) { log += msg + "\n"; },
        show: function() { alert(log); log = ""; }
    }
})();

请指出正确的方向。

2 个答案:

答案 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));