【发布时间】:2021-11-20 02:19:51
【问题描述】:
我有一段代码,我想确切地知道运行顺序以及为什么会出现这样的结果:
var variable = 10;
(()=>{
variable_3 = 35;
console.log(variable_3);
var variable_3 = 45;
variable_2 = 15;
console.log(variable);
})();
console.log(variable_2);
console.log(variable_3);
var variable=30;
这段代码的输出是
35, 10, 15, Error
我的理解是:
- 在 IIFE 中,我们创建了一个全局变量 _3 并赋值为 35。
- 然后打印出 35。
- 我们在 IIFE 中创建了一个 Var variable_3 并赋值为 45。(这个 Var 是否被提升到了 IIFE 之外??)
35.10.15 我明白了,你能解释一下最后一个数字并让我的逻辑正确吗?
谢谢!
【问题讨论】:
-
输出不应该是那个(
variable_3不应该存在于函数之外)。您是否在浏览器 REPL 中运行此程序,并且不小心将之前实验的剩余部分保留在范围内? -
哦抱歉最后的结果应该是错误的。我从帖子中复制了问题,并没有自己测试。但是为什么那个变量 3 不存在呢?我们确实在 IIFE 的顶部声明它
-
你最好使用严格模式,兼顾口译员的素质不是个好主意(
'use strict';) -
@MisterJojo 谢谢,但我很想了解原代码的吊装过程。这有助于我理解原理并通过面试lol。
-
var被提升到当前函数作用域的顶部。在variable_3的示例中,这是 IIFE 本身的顶部,variable_3在 IIFE 之外不可用。真的没有理由再用var编程了。使用const或let并将声明放在适当的位置。不要使用var。
标签: javascript ecmascript-6 hoisting