在Javascript中从嵌套函数到达变量

时间:2013-03-29 18:12:36

标签: javascript

有人可以解释一下为什么以下代码有效吗?

function getLastName()
{
    fullName.lastName = "World";   
}

function writeName()
{
    fullName = {};
    fullName.firstName = "Hello";
    getLastName();
    document.write(fullName.firstName + " " + fullName.lastName);
}

writeName();

出于某种原因,getLastName()可以到达其封闭方法的本地状态。这怎么办?我还应该利用Javascript的这个功能还是被认为是一种不好的做法?如果这是一个不好的做法,你能解释一下原因吗?

您可以在http://jsbin.com/atituk/2/edit

查看实际代码

3 个答案:

答案 0 :(得分:8)

您没有任何本地变量,需要使用var关键字。您的所有变量都是全局变量,可以在window内的任何位置访问,这根本不是好的做法。

答案 1 :(得分:2)

您在fullName函数中未使用var keywordwriteName,因此您从writeName之外的范围中获取它。它继续向上延伸直至达到最外层范围,此时它创建了一个全局范围。

总的来说,全球性的做法很糟糕,因为它们很难跟踪并且更有可能被意外覆盖(例如在竞争条件下)。

如果您使用strict mode,则会产生错误而非全局错误。

答案 2 :(得分:1)

您正在使用您的所有变量作为全局变量。所有人都被认可。为了更好地理解Javascript中的变量范围,请看一下这个很好的例子https://stackoverflow.com/a/500459/655316