Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么x在内部范围内没有定义?_Javascript - Fatal编程技术网

Javascript 为什么x在内部范围内没有定义?

Javascript 为什么x在内部范围内没有定义?,javascript,Javascript,在下面的代码中 var x = 1; (function () { console.log(x); var x = 2; }()); 为什么当console.log(x)时,x是未定义的?变量。实际代码是这样执行的 var x = 1; (function() { var x; // x = undefined console.log(x); x = 2; })(); 编辑:根据李斯特先生的建议,关于变量提升。来自MDN(): “变量声明,无论发生在何处,都

在下面的代码中

var x = 1;

(function () {
  console.log(x);
  var x = 2;
}());

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

变量。实际代码是这样执行的

var x = 1;
(function() {
    var x; // x = undefined
    console.log(x);
    x = 2;
})();
编辑:根据李斯特先生的建议,关于变量提升。来自MDN():


“变量声明,无论发生在何处,都会在执行任何代码之前进行处理。使用var声明的变量的作用域是其当前执行上下文,它是封闭函数,或者对于在任何函数之外声明的变量,是全局的。”

由于编译器的原因,即使您在代码下面启动了var,编译器将其发送到顶部,就像
varx
,因此在运行console.log之前,它首先作为未定义的“x”启动,这就是为什么在函数中首先启动要使用的所有变量是一种很好的做法,这样就不会发生这些错误。

您可以向OP解释变量是什么以及为什么
var x=1;函数which(){console.log(x);}
是否有效?我知道他们可以在其他地方查找它,但如果这里的答案是自包含的,那就太好了。@TBWill4321当我这样做时,这段代码会给出未定义的@EndritShala是的,问题不是“我如何制定这一准则……”,而是要求解释准则为何如此行事。我发布的代码是相同的,只是显示变量提升的扩展版本。@TbWill4321哦,好吧,我不理解这个问题,因为我是英语新手,所以我不理解,我想他问他需要进入2号控制台。@WolfOfWallstreet,所以你想在控制台之后使用。log(x);把2号弄对?