变量作用域
全局作用域
在全局内使用var关键字定义变量,或者在函数内直接使用变量。全局变量在定义后,可以在函数内部访问得到。
局部作用域
在函数内部使用var关键字属于局部变量,在函数内部任何位置,只要是定义的局部变量如果在函数外部定义了相同名字的全局变量,在使用是要注意以下问题。
1 var a =3; 2 3 function fun(){ 4 console.log(a); 5 var a =0; 6 } 7 8 fun(); 9 10 11 // 输出结果为undefined
在全局变量和局部变量重名时,可以使用this关键字做区分
1 var a = 3; 2 function fun(){ 3 var a =15; 4 console.log(a+this.a); 5 } 6 fun(); 7 8 // 输出结果18
在重复定义一个变量时,如果没有重新赋值,结果不会改变。
1 var a =12; 2 var a; 3 console.log(a); 4 5 var b = function(){ 6 console.log("bbb"); 7 } 8 var b; 9 b(); 10 11 // 输出结果为 12 bbb
上面这个例子我不仅使用了变量作为测试,还使用了函数作为参考,因为函数的值在堆中存储,而函数名也存储在栈中,函数名指向地址,所以说函数名和变量名都是存储在栈中的。因此做这个测试也没有问题。