我对JavaScript中的作用域有疑问。
如果我有这段代码:
var v = 10;
function fun() {
v = 20;
if (v > 10) {
var v = 0;
}
}
fun();
为什么在执行fun()之后v仍然是10; ?
我是说全球不是v = 20;
?那么它不会从10 = 20改变v的值吗?
我有点困惑,我已经尝试过阅读JavaScript范围,但没有帮助我理解为什么它仍然是10 ...
如果有人能给我一个解释,我将非常感激......:)
答案 0 :(得分:0)
这是因为行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>';
}
&#13;
<div id="log"></div>
&#13;
我发现可视化此过程的最佳方法如下。
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。