JavaScript 提升同一变量的多个声明

标签 javascript hoisting

我试图理解 JavaScript 提升,根据我的理解,在执行代码之前为所有变量声明留出内存空间。

我想了解在同一变量有多个声明的情况下解释器如何通过提升来工作。考虑以下代码:

 console.log(a);

 //first declaration
 function a() {
     console.log('hello');
 }

 //second declaration
 var a = 2;

输出是函数声明:

function a() {
    console.log('hello');
}

因此,我假设解释器遇到的第一个声明是存储在内存中的声明。但是,将声明的顺序更改为:

console.log(a);

//first declaration
 var a = 2;

//second declaration
function a() {
    console.log('hello');
}

结果相同!解释器忽略第一个声明并将第二个声明存储在内存中。为什么会发生这种情况?第二种情况的输出不应该是未定义吗?

最佳答案

解释器将读取您的代码,如下所示,

 function a() {
     console.log('hello');
 }
 var a;
 console.log(a);
 a = 2;

因此,在执行上述代码时,a 将首先引用该函数,然后将执行 var a; 行,因为 a > 在那里未定义,分配的值不会通过变量声明的方式设置为未定义。因此,该行被忽略并打印函数引用的原始值。

为了您更好地理解,一个简单的例子是,

function x(){  };
var x;
console.log(x); //function x(){  }

关于JavaScript 提升同一变量的多个声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246543/

相关文章:

javascript - Ajax 验证用户名和密码

javascript - json:当单击类别链接时,我只想显示该类别中的帖子

javascript - 使用 JavaScript 将两个数组合并为一个对象的数组

javascript - 提升变量是否有目的?

javascript - JavaScript 中的内部函数会被提升吗?范围规则如何适用于它们?

javascript - 是否可以将 html 中的函数传递给 lit-element?

javascript - 什么是 <router-view :key ="$route.fullPath">?

javascript - IIFE 中的变量提升(惰性解析)

javascript - 为什么我的 JavaScript 提升局部变量返回未定义但提升全局变量返回空白?

javascript - Javascript 提升顺序详解