JavaScript IIFE 函数和变量范围

问题描述 投票:0回答:1

阅读JavaScript Puzzlers!,我一直在跟进,直到遇到这种情况。

代码

var name = "abc";
(function () {
    console.log(name);
    var name = "xyz";
    console.log(name);
}) ();

退货

undefined
xyz

但是这个

var name = "abc";
(function () {
    console.log(name);
}) ();

退货

abc

我很困惑,为什么第一次调用时第一个代码是

name
未定义?我猜这是因为 JavaScript 提升和其他原因。这两段代码有什么不同?

javascript variables scope global-variables iife
1个回答
0
投票

这与 IIFE 无关,这只是 var 提升,正如你所猜测的。使用经典函数也会遇到同样的情况。

您在 IIFE 中重新声明

name
somewhere 的事实取消了此 IIFE 中
name
的全局范围。第一次在 IIFE 中调用
name
时,它的行为就像是在当前作用域的顶部(此处为 IIFE)声明(没有初始化),因此是
undefined

您可以通过注释和取消注释一行来使用这个小fiddle来测试var提升概念。

© www.soinside.com 2019 - 2024. All rights reserved.