作用域

79 阅读1分钟

作用域指的是程序运行代码声明变量的区域,作用域决定了如何查找变量,也就是当前执行代码,使用变量的权限,或者说,当前执行代码。js中采用的静态作用域,静态作用与执行环境无关,与声明有关。

作用域的分类分为全局区域和局部区域,全局相对浏览器, window 对象下所有内容都是全局的访问权限,在任意的代码中。全局作用域有个弊端:如果我们写了很多行 JS 代码,变量定义都没有用函数包括,那么它们就全部都在全局作用域中。这样就会污染全局命名空间, 容易引起命名冲突。这就是为何 jQuery、Zepto 等库的源码,所有的代码都会放在(function(){…})()中。因为放在里面的所有变量,都不会被外泄和暴露,不会污染到外面,不会对其他的库或者 JS 脚本造成影响。这是函数作用域的一个体现。

局部作用域是函数方法内部声明的变量,访问权限在方法体内部。局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部。作用域是分层的,内层作用域可以访问外层作用域的变量,反之则不行。