初学JS:javascript中变量声明 var和不加var的区别(自己的理解,复习用,错误概不负责)


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可删,学到以后再来补充





猜你喜欢

转载自blog.csdn.net/qq_38864196/article/details/80654130