为什么需要在括号JavaScript中包含一个立即调用的函数表达式IIFE

时间:2016-06-09 20:59:52

标签: javascript anonymous-function iife

我有以下不会运行的代码(我试图拥有0个全局变量)。

function() {
  var createworker = function() {
    //private implemenation 
    var count = 0;
    var task1 = function() {
      count += 1;
      console.log("task1 " + count);
    };
    var task2 = function() {
      count += 1;
      console.log("task2 " + count);
    };

    return {
      // these are the aliases or the public api 
      // revealing module pattern mode 
      job1: task1,
      job2: task2
    };
  };

  var result = 2 + 2;
  var worker = createworker();

  worker.job1();
  worker.job2();
  worker.job2();
  worker.job2();
  worker.job2();
}();

由于某种原因,JavaScript并不喜欢这样。但是下面的例子或者只是在()中包含匿名函数允许它自己调用它。这里发生了什么,为什么会这样?

(function() {
  var createworker = function() {
    //private implemenation 
    var count = 0;
    var task1 = function() {
      count += 1;
      console.log("task1 " + count);
    };
    var task2 = function() {
      count += 1;
      console.log("task2 " + count);
    };

    return {
      // these are the aliases or the public api 
      // revealing module pattern mode 
      job1: task1,
      job2: task2
    };
  };

  var result = 2 + 2;
  var worker = createworker();

  worker.job1();
  worker.job2();
  worker.job2();
  worker.job2();
  worker.job2();
}());

1 个答案:

答案 0 :(得分:1)

将它括在括号中是你如何使它成为一个表达式。表达式的结果是最后一个参数,因为那里只有一个参数(函数),它是表达式的值。

一旦评估,然后使用以下一组括号调用表达式(函数)的值。

这就是它用括号括起来创建实际表达式的原因。