[英]JavaScript Global and Local Scope
我有一个关于JavaScript范围界定的问题。
如果我有此代码:
var v = 10;
function fun() {
v = 20;
if (v > 10) {
var v = 0;
}
}
fun();
为什么在执行fun()之后v仍然是10? ? 我的意思是isnt v = 20;
全球? 那么它不会将v的值从10 = 20改变吗? 我有点困惑,我已经尝试阅读有关JavaScript作用域的信息,但并没有帮助我理解为什么它仍然是10 ...
如果有人能给我一个移植物,我将不胜感激... :)
这是因为行var v = 0; 通过执行此操作,您已在名为v的函数中创建了局部变量,因此当您说v = 20时,是指局部v而不是全局v。
为了证明这一点,我创建了此代码片段,以表明正是var导致了此行为。 代码段中的日志功能就在那里,因此您可以在DOM中查看输出。
var v = 10; function fun() { v = 20; if (v > 10) { var v = 0; } } function bar() { v = 20; if (v > 10) { v = 0; } } log("Before fun:",v); fun(); log("After fun:",v); bar(); log("After bar:",v); function log (){ document.getElementById("log").innerHTML += Array.prototype.slice.call(arguments).join(' ') + '<br>'; }
<div id="log"></div>
我发现可视化此过程的最佳方法如下。
var v = 10;
function fun() {
v = 20;
if (v > 10) {
var v = 0;
}
}
fun();
我认为这是提升过程。
var v = 10;
function fun() {
var v;
v = 20;
if (v > 10) {
v = 0;
}
}
fun();
通过此新代码,很明显v = 20是指局部v而不是全局v。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.