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