我正在浏览JS吊装的代码片段。其中一个片段看起来像
function
输出结果为:employeeId
我已阅读有关提升的内容,根据我的理解,所有变量都将被视为在函数顶部声明并在其实际声明/定义的行中初始化。在这种情况下,var employeeId
函数标识符将在函数顶部声明为undefined
,其值显然为function
,因此函数的第一行应抛出错误。
请让我知道为什么输出为class ALinearState(val items: List<Item>) : LinearState
data class Item(name: String, ...)
?
答案 0 :(得分:1)
两个var
声明和函数声明都被提升到它们发生的范围的顶部(按此顺序); var
获取undefined
作为其值,函数的绑定将函数作为其值。只有在完成之后才能执行的函数中的任何分步代码。
所以你的例子实际上与此相同:
var employeeId; // Declaration
function foo() { // Declaration
function employeeId() { // Declaration (shadows outer `employeeId`)
console.log(typeof employeeId);
}
employeeId();
return;
}
employeeId = 'abc123';
foo();
答案 1 :(得分:0)
因此函数的第一行应抛出错误。
否,函数声明 与值一起被提升(除非它在内部块中声明)。
在您的代码中,
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;
}