为什么Javascript中的以下代码中只显示一条警报消息?

时间:2014-01-26 12:31:51

标签: javascript

为什么Javascript中只有一条警告消息显示在下面的代码中?

var a = 1;
function f() {
    var a = 2;
    function n() {
       alert(a);
    }
    n();
}
f();

不应出现2条警报消息吗?

4 个答案:

答案 0 :(得分:3)

不,不应该。您只运行一次f()函数,在此范围内,您只运行一次函数n()。这意味着您也只能运行一次alert,这就是为什么只出现一条警报消息。

它基本上是这样的:

  1. (第1行)分配变量a
  2. (第2-8行)创建函数f()
  3. (第9行)运行函数f()
    1. (第3行)分配变量a
    2. (第4-6行)创建函数n()
    3. (第7行)运行函数n()
      • (第5行)警告变量a
      • 的值
  4. 如您所见,它只运行警报的一部分,而不是两次

答案 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()才能做到这一点。因此,代码的操作顺序为:

  1. 将'a'设为1
  2. 触发器f()
  3. 设置'a'等于2
  4. 触发n()
  5. 提醒'a'