JavaScript作用域和作用域链

作用域

作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。

在JavaScript中,变量的作用域有全局作用域和局部作用域两种。

作用域链

函数对象有一个内部属性[[Scope]],包含了函数被创建后的作用域中对象的集合,

这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。

示例:

当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象填充。


作用域就是变量和函数的可访问范围,通常,局部环境中的变量和函数是不能被外部环境访问的;

作用域链决定了哪些数据能够被当前函数访问以及访问的顺序;

函数创建时,会创建一个Global Object,填入它的作用域链;函数执行时,会创建一个运行期上下文的对象,它定义了函数执行时的环境。函数执行环境包含一个活动对象,该对象包含了函数的所有局部变量、命名参数、参数集合以及this,它会被推入作用域链的最前端;

函数执行过程,每遇到一个变量,都会经历一次标识符解析的过程(逐级向上搜索作用域链)以决定从哪里获取和存储数据;

全局变量存在于运行期上下文作用域链的最末端,查找最慢,所以我们应该尽可能少使用全局变量,如果使用,就先用局部变量缓存下来;

在运行期上下文运行的过程中,其作用域链只会被 with 语句和 catch 语句影响,应少用with,把catch中的错误委托给一个函数处理;

js中没有块级作用域,但是我们可以模仿实现它。


参考链接

https://segmentfault.com/a/1190000003934412

https://segmentfault.com/a/1190000007841345

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容