JS中全局变量和局部变量的区别是什么?

通过前面的学习,我们知道变量需要先声明后使用,但这并不意味着声明变量后就可以在任意位置使用该变量。例如,在函数中声明一个age变量,在函数外进行访问,就会出现age变量未定义的错误,示例代码如下。

function info(){
	var age = 18;
}
info();
console.log (age);		//报错,提示 age is not defined( age未定义)

从上述代码可以看出,变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域。JavaScript根据作用域使用范围的不同,将其划分为全局作用域、函数作用域和块级作用域(ES6提供的)。上述示例声明的age变量只能在info()函数体内才可以使用。

接下来我们针对JavaScript中不同作用域内声明的变量进行介绍。

1.全局变量:不在任何函数内声明的变量(显式定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量,在任何地方都可以访问到的变量就是全局变量,全局变量所在的区域就是全局作用域。

2.局部变量:只在固定的代码片段内可访问到的变量,最常见的例如函数内部的变量,就是局部变量。局部变量所在的区域就是局部作用域(函数作用域)。

3.块级变量:ES6提供的let关键字声明的变量称为块级变量,仅在“{}”中间有效,如if、for或while语句等。

对于初学者来说,重点是理解全局变量和局部变量的区别,而块级变量和let关键字属于ES6的新增内容。

全局变量和局部变量

下面我们通过代码演示全局变量和局部变量的区别,具体代码如下。

//全局作用域
var num = 10;
//全局变量
function fn(){
	//局部作用域
	var num = 20;	//局部变量
	console.log(num);	//输出局部变量num的值,输出结果:20
}
fn();
console.log(num);	//输出全局变量10的值,输出结果:10

在上述代码中,全局变量num和局部变量num虽然名称相同但具它们百不影响,在fn()函数外获取的num的值为10,在fn()函数内获取到的num的值为20。需要注意的是,函数中的变量如果省略var关键字,它会白动向上级作田城杏找变量,一直找到全局作用域为止。示例代码如下。

function fn(){
	num2=20;
}
fn();
console.log(num2);	//输出结果:20

在上述代码中,fn()函数中的“num2 = 20:”使得程序首先会在fn()函数的局部作用域中查找是否存在num2变量,如果不存在,则到上级作用域,也就是全局作用域中查找。由于在全局作用域中也没有num2变量,此时就会在全局作用域下创建一个全局变量num2。

通过以上对比可以看出,在全局作用域下,添加或省略var关键字都可以声明全局变量;而在函数中,添加var关键字声明的变量是局部变量,省略var关键字时,如果变量在当前作用域下不存在,会自动向上级作用域查找变量。局部变量只能在函数内部使用,函数的形参也属于局部变量。从执行效率来说,全局变量在浏览器关闭页面的时候才会销毁,比较占用内存资源;而局部变量在函数执行完成后就会销毁,比较节约内存资源。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值