教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

JS全局变量和局部变量的区别

更新时间:2021年10月08日15时28分 来源:传智教育 浏览次数:

好口碑IT培训

通过前面的学习,我们知道变量需要先声明后使用,但这并不意味着声明变量后就可以在任意位置使用该变量。例如,在函数中声明一个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关键字时,如果变量在当前作用域下不存在,会自动向上级作用域查找变量。局部变量只能在函数内部使用,函数的形参也属于局部变量。从执行效率来说,全局变量在浏览器关闭页面的时候才会销毁,比较占用内存资源;而局部变量在函数执行完成后就会销毁,比较节约内存资源。



猜你喜欢:

var、let、const声明变量的区别

JS变量教程:JavaScript中变量的用法详解

变量是什么?JavaScript变量的命名声明与赋值讲解

JavaScript变量命名规范介绍

传智教育HTML&JS+前端高手班

0 分享到:
和我们在线交谈!