我试图理解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:为什么?
答案 0 :(得分:2)
Q1:为什么?这个名为iife的存储是否存储以供稍后调用?
基本上是的。函数表达式的名称使不成为封闭范围中的符号。例如。如果你有
var foo = function bar() {
// `bar` is defined here, `foo === bar`
};
// only `foo` is defined here
然后您只能访问foo
。 bar
只能在函数内 (并指向函数本身)。有关详细信息,请参阅Named function expressions demystified。
Q2
这与IIFE无关。他们俩都被打破了。
您在第二个示例中看不到输出的原因是您在调用{{1}之前尝试访问boo
(不存在) (确实存在)。
JavaScript在抛出错误时停止执行代码,因此永远不会调用tee
。