我不明白为什么这会显示未定义的'。
'use strict';
console.log(x);
if(true) {
var x = 'x';
}
请有人向我解释一下吗?
答案 0 :(得分:2)
提升导致代码的行为与此相同:
'use strict';
var x;
console.log(x);
if(true) {
x = 'x';
}
所以x仍未定义,但在声明之前使用它并不是错误,因为它仍然在同一范围内声明。
答案 1 :(得分:1)
变量提升仅将变量的声明移动到范围的顶部。它不会将赋值移动到任何地方。
正如其他人所说,吊装会使您的代码等同于
"use strict";
var x;
console.log(x);
if (true) {
x = 'x';
}
即使在提升后,x
仍未定义,因为尚未为其分配值。
如果没有提升,您的代码会因未声明的变量而引发错误。提升的好处是,如果在为变量赋值之前引用变量,则不会出现错误。