全局变量:指定义于function 外部的 var +变量名的外部声明(window对象)
例如:var a =100;function test(){ console.log(a)} ; test(); //a输出为100
全局变量的声明主要有2种方式:
1.显示声明 如:var a =100;function test(){ console.log(a)} ; test();
2.隐示声明 如 var a=100; function test() { a=10; console.log(a)} ;console.log(a) //输出 10 10
其中a=10为隐示声明一个全局变量,尽管它被写在function里面,只有当function被调用时才会变成全局变量
经典例题:
var a = 10; //声明和定义一个全局变量
function test(){
a = 100; //表面上为:全局变量的隐示定义
console.log(a); //打出100
console.log(this.a); //打出10
var a; //声明一个局部变量
console.log(a); //打出100
}
test();
console.log(a); //打出10
运行结果为: 100 10 100 10
解析:javascript在执行前会对所有的声明部分进行分析,从而确定其作用域。所以:先分析 var a=10; var a 。得到var a=10为全局变量 var a 为局部变量。所以当执行到 a=100时,内部已经确定a为局部变量的定义。所以a =100不能理解为全局变量的隐示定义。
其中this指针指向的是函数调用者,而他的调用者在全局作用域,所以this.a指向全局的a即为10