全局函数中的局部变量

时间:2014-03-21 20:30:28

标签: javascript

为什么它会在警告中显示"AAA"而不是"BBB"

http://jsfiddle.net/Lp4cS/

var z = "AAA";

function xx() {

    var z = "BBB";
    yy();

}

function yy() {

    alert(z);

}

xx();

4 个答案:

答案 0 :(得分:0)

var z = "BBB"是声明的函数的本地,又名xx - 它显示AAA,因为yy可以访问该变量。

答案 1 :(得分:0)

这是因为你在函数

中重新声明了变量z
function xx() {

    var z = "BBB";
    yy();

} 

z的范围现在位于xx()

如果你想更新全局var z,那么你应该做为

function xx() {

     z = "BBB";
    yy();

}

答案 2 :(得分:0)

http://jsfiddle.net/Lp4cS/1/

以下是如何使其工作的示例,您希望如何......但应避免这种情况......不应访问或设置全局变量。这被认为是非常糟糕的做法。

window.z = "AAA";

function xx() {

    window.z = "BBB";
    yy();

}

function yy() {

    alert(window.z);

}

xx();

在PHP中你可以做同样的事情......

<?php

$z = "AAA";

function xx() {

    global $z;
    $z = "BBB";
    yy();

}

function yy() {

    global $z;
    echo $z;

}

xx();

答案 3 :(得分:0)

这是它的工作原理:

var z = "AAA";    // 1. assign z with "AAA" as global, save it in memory address #1

function xx() {   
  var z = "BBB";  // 3. assign z with "BBB" as local, save it in memory address #2
  yy();           // 4. call function yy()
}

function yy() {   
  alert(z);       // 5. alert z from memory address #1, because i don't know the other z
}

xx();             // 2. call function xx()