蘑小De菇

个人技术博客

hi,我是蘑小De菇,一名前端开发者。


记录个人对技术的理解和开发过程中遇到的问题,欢迎了解更多。

作用域、作用域链

什么是作用域

  • 变量作用的范围

js里面有几种作用域

  • 全局作用域
    • 全局作用域在页面打开时创建、在页面关闭时销毁。
    • 全局变量/函数都将作为window对象的属性保存。
  • 函数作用域
    • 在函数{}内,函数内创建的变量在函数外不可以被访问。
    • 函数执行完毕,作用域销毁。 3.避免创建过多全局变量,
  • 块级作用域(ES6
    • es6新增,在语句块内{}创建的变量在语句块外不可以被访问。

作用域和执行上下文的区别

JavaScript属于解释型语言,JavaScript的执行分为:解释和执行两个阶段,这两个阶段所做的事并不一样:

解释阶段: 词法分析 语法分析 作用域规则确定

执行阶段: 创建执行上下文 执行函数代码 垃圾回收

区别

  • 执行上下文在运行时确定,随时可能改变;作用域在定义时就确定,并且不会改变。
  • 一个作用域下可包含多个执行上下文,或者一个都没有(没有执行)
  • 一个作用域下,不同的调用会产生不同的执行上下文

作用域链

内层作用域可以访问外层作用域,这种一层一层的作用域嵌套在一起,就是作用域链。

如:如果当前作用域没有定义的变量,会成为 自由变量 。自由变量的值如何得到呢?它会向父级作用域一层一层地向外查找,直到找到全局window对象,也就是全局作用域,如果全局作用域里还没有,就返回undefined。类似于顺着一条链条从里往外一层一层查找变量,这条链条,我们就称之为作用域链。内部环境可以通过作用域链访问所有外部环境,但外部环境不能访问内部环境的任何变量和函数。

下一篇

Array

上一篇

NodeList对象