全局作用域
在全局内使用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
上面这个例子我不仅使用了变量作为测试,还使用了函数作为参考,因为函数的值在堆中存储,而函数名也存储在栈中,函数名指向地址,所以说函数名和变量名都是存储在栈中的。因此做这个测试也没有问题。
来源:https://www.cnblogs.com/wangjingzhi/p/12113388.html