Javascript在if / else等块中提升

时间:2017-10-19 05:13:18

标签: javascript

我不明白为什么这会显示未定义的'。

'use strict';
console.log(x);

if(true) {
  var x = 'x';
}

请有人向我解释一下吗?

2 个答案:

答案 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仍未定义,因为尚未为其分配值。

如果没有提升,您的代码会因未声明的变量而引发错误。提升的好处是,如果在为变量赋值之前引用变量,则不会出现错误。