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

Why do you need to wrap a Immediately invoked function expression IIFE in parenthesis JavaScript

我有以下不会 运行 的代码(我试图拥有 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();
}());

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

计算后,表达式(函数)的值将使用以下一组括号调用。

这就是为什么它被括在括号中,以创建实际的表达式。