美文网首页
JavaScript作用域和作用域链

JavaScript作用域和作用域链

作者: raincoco | 来源:发表于2017-03-07 18:03 被阅读68次

    作用域

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

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

    作用域链

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

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

    示例:

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

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

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

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

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

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

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

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

    参考链接

    https://segmentfault.com/a/1190000003934412

    https://segmentfault.com/a/1190000007841345

    相关文章

      网友评论

          本文标题:JavaScript作用域和作用域链

          本文链接:https://www.haomeiwen.com/subject/wmgmgttx.html