繁体   English   中英

JavaScript全局和局部范围

[英]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.

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