【发布时间】:2016-12-15 12:29:22
【问题描述】:
我以为我了解立即调用函数表达式 (IIFE) 的本质,但现在我意识到我不了解。
我在一段代码中创建了一个 IIFE(在使用 JQuery 的网页中)。但是,如果我命名该函数,并尝试从封闭范围调用该函数,我会收到“未定义”错误?
实时代码在 IE11 和 Firefox 38 中的行为不同,这让事情变得更加混乱。但是我在这里创建了一个简单的测试 JSfiddle-
https://jsfiddle.net/ktqq4uat/
这在浏览器之间是一致的。
我以为这两行-
(function myFunction2() {
...
(myFunction3= function() {
...
几乎是等价的,但我只在“myFunction2”上得到一个未定义的错误。
我会很感激一些帮助理解-
1) 为什么 (function myFunction2() {... 隐藏了函数的名称及其内部范围。该名称的范围是什么?
2) 为什么上面的 myFunction2 和 myFunction3 行为不同。
Rgds
【问题讨论】:
-
IIFE 是一个括在括号中的函数,在它们之外不可用。虽然你可以在里面调用它们。
-
你不能做
testObject.newFunction2 = myFunction2;,它在外面是不可见的 -
什么,IE11 还没有修复这个 IE6 的 bug?
标签: javascript scope iife