[英]Javascript: initializing a variable once (like a static variable) in a recursive function
[英]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);
}());
(注意,我已更正了您的函数调用,因此它不会返回语法错误。)
显然,这现在设置a
以undefined
它做的第一之前console.log
。
变量的每个定义实际上都是其范围顶部的变量声明,以及定义所在位置的赋值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.