我认为函数中定义的任何变量都是本地的,但我可以轻松访问其函数之外的变量'e'。
function change() {
var d = 6;
e = 7;
}
change();
alert(e); //> alerts 7
答案 0 :(得分:10)
因为默认情况下新变量将进入全局范围。 var
通过将变量的存在限制在当前范围内来防止这种情况发生。
答案 1 :(得分:2)
因为它是在没有var
的情况下声明的,所以它成为全局window
对象的一部分。
答案 2 :(得分:1)
你没有明确地声明它,所以它占据了全球范围。
答案 3 :(得分:1)
这是因为默认情况下e是全局的,使用var使范围变量。 您可以在Javascript Garden Scope and Namespaces
中详细了解相关信息答案 4 :(得分:1)
我猜你正在遵循这个假设
JSLint期望var将是 只宣布一次,它会 在使用之前声明。
你的代码问题是你使用的是一个var,但你的第二行在它前面没有var。这就是将可变e推入全局命名空间。
为什么会这样?您在变量声明中使用了分号而不是逗号。
function change() {
var d = 6, //Change this to a comma
e = 7;
}
change();
alert(e); //will produce an error now
答案 5 :(得分:1)
创建全局变量非常容易,这里是我见过的其他一些问题。
// :-( antipattern: implied global variable
function sum(x, y) {
result = x + y; // result is global
return result;
}
// :-) better
function sum(x, y) {
var result = x + y; // result is local
return result;
}
// :-( antipattern: chain assignments as part of a var declaration
function foo() {
var a = b = 0; // b is global
}
// :-) better
function foo() {
var a, b;
a = b = 0; // both local
}