为什么Javascript中只有一条警告消息显示在下面的代码中?
var a = 1;
function f() {
var a = 2;
function n() {
alert(a);
}
n();
}
f();
不应出现2条警报消息吗?
答案 0 :(得分:3)
不,不应该。您只运行一次f()
函数,在此范围内,您只运行一次函数n()
。这意味着您也只能运行一次alert
,这就是为什么只出现一条警报消息。
它基本上是这样的:
a
f()
f()
a
n()
n()
a
如您所见,它只运行警报的一部分,而不是两次
答案 1 :(得分:1)
代码调用f
然后调用n
并显示警报。我想不出警报应该出现两次的原因。
答案 2 :(得分:1)
您可能对功能的工作方式存在误解。声明时不调用该函数;只有在它被召唤时。因此这段代码:
function f() {
var a = 2;
function n() {
alert(a);
}
n();
}
将不执行任何操作,因为未调用f
。看起来你对这个概念很满意,但也许你不太满意的是它在功能中同样适用:
var a = 2;
function n() {
alert(a);
}
// n() has not been invoked yet, only defined.
n(); // n() has now been invoked.
值得注意的是,您的第一个a
变量从未在此程序中使用过;第二个a
变量完全独立(在f
之外,a
仍为1,在f
内,a
始终为2)。这是因为范围可变。
答案 3 :(得分:1)
只有函数'n'调用alert(a)。即使函数'n'在函数'f'内,触发函数'f'也不会自动触发嵌入函数n;只有n()才能做到这一点。因此,代码的操作顺序为: