Javascript Undefined variable redefined inside function
本问题已经有最佳答案,请猛点这里访问。
你能帮我理解为什么JS在这里这样工作吗?
1 2 3 4 5 6 | var timer = 3; var func = function() { alert(timer); var timer = 5; } func(); |
它让我"未定义"。
如果我做
1 2 3 4 5 6 | var timer = 3; var func = function() { alert(timer); timer = 5; } func(); |
它按预期工作(警报3)。
这是我无法正确理解的范围。
在警报之后,JS不应该覆盖"计时器"的定义吗?
仅在镀铬上测试过。
感谢你们。
1 2 3 4 5 | var timer = 3; var func = function() { alert(timer); var timer = 5; } |
当js解释时,这段代码变成了这个;
1 2 3 4 5 6 | var timer = 3; var func = function() { var timer; // Here local variable timer is undefined alert(timer); // here local var timer alerts rather than global var timer timer = 5; // here timer got initialized } |
这是因为在javascript中提升概念。 你可以在这里阅读提升弗罗姆
变量提升令人烦恼,因为javascript'hoists'(发送变量声明)到当前范围的顶部。
但是,它不会将初始化发送到当前作用域的顶部。
所以:
1 2 3 4 5 | var timer = 3; var func = function() { alert(timer); var timer = 5; } |
变为:
1 2 3 4 5 6 | var timer = 3; var func = function() { var timer; alert(timer); timer = 5; } |
什么时候解释。
对许多开发人员来说,吊装是一种未知或被忽视的JavaScript行为。
如果开发人员不理解提升,程序可能包含错误(错误)。
为避免错误,请始终在每个范围的开头声明所有变量。
由于这是JavaScript解释代码的方式,因此它始终是一个很好的规则。