1. javascript无块级作用域,变量在函数内部可见。和php类似。
function func_scope(){
var x=1;
if (true) {
var x=2;
if (true) {
var x=3;
alert(x);
}
alert(x);
}
alert(x);
}
func_scope();
输出: 3 3 3
2. 对象初始化可以对自身的属性执行修改,可以修改全局变量的值。
function foo(){
foo.abc = function(){alert('def')};
this.abc = function(){alert('xyz')};
abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')};
}
foo.prototype.abc = function(){alert('456');}
foo.abc = function(){alert('123');}
var f = new foo();
f.abc();
foo.abc();
abc();
输出: xyz def 错误: abc is not defined (相应解释在第3个例子中)
3. 函数内,只要变量名前面出现var则该变量为局部变量。
var myVar = "GLOBAL";
function foo() {
// myVar已经在下面声明,但是在此之前却没有定义
alert("myVar evaluates to '"+myVar+"'");
// 这个myVar其实是局部变量
myVar = "NEW_GLOBAL_VALUE";
alert("myVar evaluates to '"+myVar+"'");
// window.myVar指向全局的myVar
alert("myVar evaluates to '"+window.myVar+"'");
// 声明一个局部变量myVar,去掉这个则输出结果就完全不同
var myVar = "LOCAL";
alert("myVar evaluates to '"+myVar+"'");
}
foo();
alert("myVar evaluates to '"+myVar+"'");
输出: myVar evaluates to 'undefined' myVar evaluates to 'NEW_GLOBAL_VALUE' myVar evaluates to 'GLOBAL' myVar evaluates to 'LOCAL' myVar evaluates to 'GLOBAL'
对应第2个例子,foo中的abc(abc = function(){alert('@@@@@')};)为局部变量,全局变量中没有定义过abc所以会报undefined的错误。
结论:
参考文档: http://www.itmill.com/articles/Javascript_global_and_local_variable_scope.htm http://birdshome.cnblogs.com/archive/2005/01/26/97885.html http://www.planabc.net/2007/09/20/javascript_examination_questions/