[英]Javascript hoisting code snippet
我正在浏览 JS 提升的代码片段。 其中一个片段看起来像
var employeeId = 'abc123';
function foo() {
employeeId();
return;
function employeeId() {
console.log(typeof employeeId);
}
}
foo();
output 将是: function
我已经阅读了有关提升的信息,并且根据我的理解,所有变量都将被视为在 function 的顶部声明并在其实际声明/定义的行中初始化。 在这种情况下, employeeId
function 标识符将在 function 的顶部声明为var employeeId
,其值显然undefined
,因此 function 的第一行应该抛出错误。
请让我知道为什么 output 是function
?
var
声明和函数声明都被提升到它们出现的作用域的顶部(按这个顺序); var
s 获得undefined
作为它们的值,函数的绑定将函数作为它们的值。 只有在完成之后,才会执行函数中的任何分步代码。
因此,您的示例实际上与此相同:
var employeeId; // Declaration
function foo() { // Declaration
function employeeId() { // Declaration (shadows outer `employeeId`)
console.log(typeof employeeId);
}
employeeId();
return;
}
employeeId = 'abc123';
foo();
因此函数的第一行应该抛出错误。
不,函数声明与值一起提升(除非它在内部块中声明)。
在您的代码中,
var employeeId = 'abc123';
function foo() {
console.log(employeeId); //will print function body
return;
function employeeId() {
console.log(typeof employeeId);
}
}
但如果函数声明在内部块内
var employeeId = 'abc123';
function foo() {
console.log(employeeId); //will print undefined
{
function employeeId() {
console.log(typeof employeeId);
}
}
return;
}
发生这种情况 function 声明在变量之前被提升。
在 JavaScript function 和变量声明被提升到执行上下文的顶部。 您需要记住这三个规则。
https://www.codingame.com/playgrounds/7974/understanding-hoisting-in-javascript
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.