更新时间:2023-10-27 来源:黑马程序员 浏览量:
通常来说,一段代码中所用到的名字(如变量名)并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域机制可以有效减少命名冲突的情况发生。本节将对作用域进行详细讲解。
作用域的分类
通过前面的学习,我们知道变量需要先声明后使用,但这并不意味着声明变量后就可以在任意位置使用该变量。例如,在函数中声明一个age变量,在函数外进行访问,就会出现age变量未定义的错误,示例代码如下。
function info() { var age = 18; } info(); console.log(age); //报错,提示age is not defined(age未定义)
从上述代码可以看出,变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域。JavaScript根据作用域使用范围的不同,将其划分为全局作用域、函数作用域和块级作用域(ES6提供的)。上述示例声明的age变量只能在info0函数体内才可以使用。
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
全局作用域
作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件处于全局作用域内的变量,称为全局变量
局部作用域
作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。处于局部作用域内的变量称为局部变量如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐但是有一种情况,函数内部的形参可以看做是局部变量。