为什么此输出未定义?

时间:2019-09-26 10:57:56

标签: javascript variables scope hoisting

这是我很难回答的一个棘手的面试问题,更不用说清楚解释为什么此代码输出未定义了。

  var x = 21;
    var girl = function() {
      console.log(x);
      var x = 20;
    };
    girl();

因此,x = 20在console.log下面-Javascript提升了变量,但是为什么不将其输出为20?好的,让我们想象一下,它会忽略在console.log下声明的变量-为什么它不在全局范围内显示?谁能为我讲清楚?我会很感激的。

1 个答案:

答案 0 :(得分:3)

代码的“内部表示”类似于

var x = 21;
var girl = function() {
  var x;  // (equals `var x = undefined`)
  console.log(x);
  x = 20;
};
girl();

这可能会清除它。