Javascript IIFE:立即调用函数表达式执行。怎么运行?

时间:2015-07-07 13:48:08

标签: javascript

我试图理解JS中的IIFE如何运作。

我第一次跑这个:

(function boo() {
      var i = 90;
      console.log(i);
    })();

并在下面添加

boo();

不会跑。

Q1:为什么?这个名为iife的存储是否存储以供稍后调用?

当我这样做时

 var tee = function boo() {
  var i = 90;
  console.log(i);
};

tee();

boo();

它运行

但是当我这样做时

 var tee = function boo() {
  var i = 90;
  console.log(i);
};

boo();

tee();

它没有运行。

Q2:为什么?

1 个答案:

答案 0 :(得分:2)

  

Q1:为什么?这个名为iife的存储是否存储以供稍后调用?

基本上是的。函数表达式的名称使成为封闭范围中的符号。例如。如果你有

var foo = function bar() {
  // `bar` is defined here, `foo === bar`
};
// only `foo` is defined here

然后您只能访问foobar只能在函数内 (并指向函数本身)。有关详细信息,请参阅Named function expressions demystified

  

Q2

这与IIFE无关。他们俩都被打破了。

您在第二个示例中看不到输出的原因是您在调用{{1}之前尝试访问boo(不存在) (确实存在)。

JavaScript在抛出错误时停止执行代码,因此永远不会调用tee