var a=1; function test() { document.write(a); var a = 0; document.write(" ",a); }
这里结果为,undefined 0,这是为什么呢,由于JS是预编译,在执行前先在内存中建立了全局变量a,和局部变量a,但是调用text()方法时,局部变量a没有被赋值,所以是undefined,后面一句document.wirte语句之前由于已经赋值,所以成功。
继续测试:
a=1; function test() { document.write(a); var a = 0; //document.write(" ",window.a); document.write(" ",a); }
这里结果还是为,undefined 0,原因和上面一样,但我在函数外直接定义了a=1,查找资料发现,隐式声明的时候,js引擎会去上下文查找是否有这个变量,没有会在window上声明这个变量,所以我注释的那一行document.write(window.a)会打印出1!
a=1; function test() { document.write(a); a=0; //document.write(" ",window.a); document.write(" ",a); }
这里就显而易见了 ,输出1 0,这里就是全局变量的赋值了。
var a=1; function test() { document.write(a); a=0; //document.write(window.a); document.write(" ",a); }
这里和上面也没什么区别。
如果定义全局变量的话 var a=1和a=1在属性上还有一些区别的,比如var a=1不可删,a=1可删,学到以后再来补充