我以为我理解了立即调用函数表达式(IIFE)的本质,但现在我意识到我不会。
我在一段代码中创建了一个IIFE(在使用JQuery的网页中)。但是,如果我命名该函数,并尝试从封闭范围调用该函数,我得到一个" undefined"错误?
实时代码在IE11和Firefox 38中表现不同,这让事情变得更加混乱。但是我在这里创建了一个简单的测试JSfiddle -
https://jsfiddle.net/ktqq4uat/
这在浏览器之间是一致的。
我想到了这两行 -
(function myFunction2() {
...
(myFunction3= function() {
...
几乎相同,但我在" myFunction2"上得到了一个未定义的错误。仅
我很欣赏一些帮助理解 -
1)为什么(函数myFunction2(){...隐藏了函数的名称及其内部作用域。该名称的范围是什么?
2)为什么上面的myFunction2和myFunction3表现不同。
RGDS
答案 0 :(得分:0)
命名函数表达式仅创建一个变量:
在他们自己的范围内。它们还评估为该函数的引用,以便您可以在某处传递该引用(例如,将其分配给myFunction3
)。
函数声明在父作用域中创建一个类似的变量。他们没有评价任何事情(因为他们不是表达方式)。