一、定义
简单来说
全局变量:就是定义在函数外部的变量,在整片代码中都可以被访问到。
局部变量:就是定义在函数内部的变量,只能在定义它的函数内部访问。
用代码举个例子:
var a = 10; function myFun(){ var b = 66; console.log(a); a = 99; } myFun();//输出结果:10 console.log(a);//输出结果:99 console.log(b);//输出结果:Uncaught ReferenceError: b is not defined
说明:
因为 a 是全局变量,所以在函数内部可以被访问到,且能被赋值
所以第一次输出结果为:10
在执行完函数后,全局变量 a 被赋值了,所以第二次输出结果为:100
而 b 是局部变量,在定义它的函数外部访问不到,所以第三次的输出结果报错找不到变量 b
二、局部变量和全局变量的变量名相同的情况
还是用代码举例:
var a = 10; function myFun(){ console.log(a);//输出结果:undefined var a = 99; console.log(a);//输出结果:99 } myFun();//输出结果见函数内注释 console.log(a);//输出结果:10
说明:
1、如果局部变量名与全局变量的变量名相同,在函数内部 变量值全部指向局部变量
2、第3行代码输出结果为undefind;因为只要局部变量 a 被声明,a就指向函数内部的局部变量;但是第3行打印在赋值语句的前面,所以输出结果为undefind
3、最后一次的打印语句在函数外部,所以打印结果为全局变量 a 的值,即 10
三、关于函数的参数问题
简单来说在定义函数时,函数名后面括号内的参数也是局部变量。
代码示例:
var a = 10; function myFun(a){ a = 99; console.log(a); return a; } myFun();//输出结果:99 console.log(a);//输出结果:10
说明:
函数的形参和全局变量重名的情况应该如何解释呢?
既然函数的参数也是局部变量,那么函数内部对于 a 的操作就都指向局部变量 a
不会影响全局变量 a
所以执行函数后输出结果为:99
函数外部打印的是全局变量 a,输出结果为:10
简单点理解就是:函数的参数就是引用变量的值,在函数内部进行加工,其实不改变变量的值
(注意:这里是【值类型】的参数传递情况可以这么理解,如果是【引用类型】的参数传递 就会影响到全局变量的值了,这个和数据存储有关)