JavaScript'吊装'

我遇到了JavaScript'hoisting',我没有弄清楚这段代码是如何起作用的:


var a = 1;


function b() {

    a = 10;

    return;


    function a() {}

}


b();

alert(a);

我知道像(function a() {})这样的函数声明将被提升到函数b作用域的顶部,但是它不应该覆盖a(因为函数声明覆盖变量声明而不是变量初始化)的值,所以我期望警报的值会是10而不是1 !!


翻翻过去那场雪
浏览 430回答 3
3回答

回首忆惘然

全局a设定为1b() 叫做function a() {}被悬挂并创建一个掩盖全局变量的局部变量aa本地a设置为10(覆盖函数a)全局a(静止1)被警告

跃然一笑

这是因为这个例子中的编译/解释顺序有些误导。function a () {}在执行任何其余函数之前解释该行,因此在函数的最开始,a其值为function a () {}。当您重新分配它时10,您将重新分配a函数的本地作用域中的值b(),然后在返回后将其丢弃,并将原始值保留a = 1在全局作用域中。您可以通过alert()在适当的位置放置s等来验证这一点,以查看a各个点的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript