繁体   English   中英

JavaScript:在函数中初始化变量

[英]JavaScript: Initializing variable in function

这里有点基本的问题。 我可以看到发生了什么,但我不能真正理解为什么它会以这种方式工作。

a = false;
var k = function() {
    console.log(a);
    var a = true
    console.log(a);
}();

我希望日志读取“false,then true”,但“a”一开始就是未定义的。 有人可以详细说明为什么会这样做。

PS。 我不是在寻找一个答案告诉我应该做什么,我正在寻找这个JavaScript内部工作原理的解释。

提前致谢

这是因为Javascript作用域的工作称为“提升”。 当解析器读取Javascript函数时,它会遍历并找到该作用域中定义的所有变量(使用var )关键字(请记住,Javascript中唯一的作用域类型是函数作用域)。 然后它将它们放在函数的顶部。

所以解析器解释你的代码如下:

a = false;
var k = (function() {
    var a;
    console.log(a);
    a = true
    console.log(a);
}());

(注意,我已更正了您的函数调用,因此它不会返回语法错误。)

显然,这现在设置aundefined它做的第一之前console.log


正如MDC文档所说

变量的每个定义实际上都是其范围顶部的变量声明,以及定义所在位置的赋值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM