我想找到最容易确定变量范围的方法。
见下一个例子(jsfiddle):
var foo = function() {
var bar = function() {
pub = "public";
var pri = "private";
alert(pub) // public
alert(pri) // private
};
// alert(pub) // pub not defined
bar();
alert(pub) // public
// alert(pri) // pri not defined
};
foo();
alert(pub) // public
// alert(pri) // pri not defined
我可以这样说:
1.-所有带有var
关键字前缀的变量都将在其功能及其所有嵌套函数中可见?
2.-所有不带var
关键字的变量在(函数容器)执行后到处都可见?
答案 0 :(得分:4)
由于人们提到全局......
你不应该使用全局变量,总是用var声明你的变量以避免混淆。如果必须使用它们,请将它们范围限定为用于代码的全局命名空间。这有助于避免与页面上的其他代码发生冲突。
var ns = {};
// Now use this anywhere in your code
ns.myGlobal = 49;
答案 1 :(得分:1)
是。你已经理解正确了。
将任何变量与前面的关键字“var”一起考虑为该函数可见,它是嵌套函数。可以把任何没有关键字“var”的变量想象成window.variable。
var foo = function() {
var bar = function() {
pub = "public";
var pri = "private";
alert(pub) // public
alert(pri) // private
};
// alert(pub) // pub not defined
bar();
alert(pub) // public
alert(pri) // pri not defined
};
foo();
alert(pub) // public
alert(pri) // pri not defined
作为一般经验法则,您不应使用全局变量。
答案 2 :(得分:0)
检查一下以获得更清晰......
var foo = function() {
var pri = "OUTER";// this is what I changed...
var bar = function() {
pub = "public";
var pri = "private";
alert(pub) // public
alert(pri) // private
};
// alert(pub) // pub not defined
bar();
alert(pub) // public
alert(pri) // pri not defined
};
foo();
alert(pub) // public
alert(pri) // pri not defined