0

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

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看到实际的代码

4

3 回答 3

8

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

于 2013-03-29T18:14:02.893 回答
2

您没有在函数内部使用var关键字反对,因此您是从范围外部获取它。它继续沿着链向上直到到达最外层范围,此时它创建了一个全局范围。fullNamewriteNamewriteName

一般来说,全局变量是不好的做法,因为它们很难跟踪并且更容易被意外覆盖(例如在竞争条件下)。

如果您使用的是严格模式,这将产生错误而不是全局错误。

于 2013-03-29T18:14:22.683 回答
1

您正在使用您的所有变量作为全局变量。所以到处都是公认的。为了更好地理解 Javascript 中的变量范围,请查看这个很好的示例https://stackoverflow.com/a/500459/655316

于 2013-03-29T18:21:31.527 回答