有人可以解释一下为什么以下代码有效吗?
function getLastName()
{
fullName.lastName = "World";
}
function writeName()
{
fullName = {};
fullName.firstName = "Hello";
getLastName();
document.write(fullName.firstName + " " + fullName.lastName);
}
writeName();
出于某种原因,getLastName()
可以到达其封闭方法的本地状态。这怎么办?我还应该利用Javascript的这个功能还是被认为是一种不好的做法?如果这是一个不好的做法,你能解释一下原因吗?
答案 0 :(得分:8)
您没有任何本地变量,需要使用var
关键字。您的所有变量都是全局变量,可以在window
内的任何位置访问,这根本不是好的做法。
答案 1 :(得分:2)
您在fullName
函数中未使用var
keyword对writeName
,因此您从writeName
之外的范围中获取它。它继续向上延伸直至达到最外层范围,此时它创建了一个全局范围。
总的来说,全球性的做法很糟糕,因为它们很难跟踪并且更有可能被意外覆盖(例如在竞争条件下)。
如果您使用strict mode,则会产生错误而非全局错误。
答案 2 :(得分:1)
您正在使用您的所有变量作为全局变量。所有人都被认可。为了更好地理解Javascript中的变量范围,请看一下这个很好的例子https://stackoverflow.com/a/500459/655316