命名的IIFE名称的范围

时间:2016-08-09 12:42:57

标签: javascript scope iife

我以为我理解了立即调用函数表达式(IIFE)的本质,但现在我意识到我不会。

我在一段代码中创建了一个IIFE(在使用JQuery的网页中)。但是,如果我命名该函数,并尝试从封闭范围调用该函数,我得到一个" undefined"错误?

实时代码在IE11和Firefox 38中表现不同,这让事情变得更加混乱。但是我在这里创建了一个简单的测试JSfiddle -

https://jsfiddle.net/ktqq4uat/

这在浏览器之间是一致的。

我想到了这两行 -

  (function myFunction2() {
   ...

  (myFunction3= function() {
   ...

几乎相同,但我在" myFunction2"上得到了一个未定义的错误。仅

我很欣赏一些帮助理解 -

1)为什么(函数myFunction2(){...隐藏了函数的名称及其内部作用域。该名称的范围是什么?

2)为什么上面的myFunction2和myFunction3表现不同。

RGDS

1 个答案:

答案 0 :(得分:0)

命名函数表达式仅创建一个变量:

  • 与函数
  • 具有相同的名称
  • 具有一个值,该值是对该函数的引用

在他们自己的范围内。它们还评估为该函数的引用,以便您可以在某处传递该引用(例如,将其分配给myFunction3)。

函数声明在父作用域中创建一个类似的变量。他们没有评价任何事情(因为他们不是表达方式)。