为什么在内部范围内未定义x?

Lou*_*ost 10 javascript

在下面的代码中

var x = 1;

(function () {
  console.log(x);
  var x = 2;
}());
Run Code Online (Sandbox Code Playgroud)

为什么当console.log(x),x未定义时?

TbW*_*321 10

可变吊装.实际代码就是这样执行的.

var x = 1;
(function() {
    var x; // x = undefined
    console.log(x);
    x = 2;
})();
Run Code Online (Sandbox Code Playgroud)

编辑:关于利斯特先生的建议,有点关于变量提升.来自MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var):

"变量声明,无论它们出现在哪里,都会在执行任何代码之前处理.用var声明的变量的范围是它的当前执行上下文,它是封闭函数,或者对于在任何函数之外声明的变量,全局."

  • 你能向OP解释一下变量是什么变量以及为什么`var x = 1; function whatever(){console.log(x);}`有效吗? (2认同)