简单理解JS中的全局变量和局部变量

一、定义

简单来说
全局变量:就是定义在函数外部的变量,在整片代码中都可以被访问到。
局部变量:就是定义在函数内部的变量,只能在定义它的函数内部访问。

用代码举个例子:

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
简单点理解就是:函数的参数就是引用变量的值,在函数内部进行加工,其实不改变变量的值
(注意:这里是【值类型】的参数传递情况可以这么理解,如果是【引用类型】的参数传递 就会影响到全局变量的值了,这个和数据存储有关)

风影OvO

风影OvO, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA 4.0协议进行授权 | 转载请注明原文链接

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐