作用域和作用域链

js 中,变量的作用域有三种:

  • 全局作用域
  • 函数作用域
  • ES6 新增了块级作用域

全局作用域:

  1. 没有用 var 声明的变量(除去函数的参数)都具有全局作用域,成为全局变量
  2. window 的所有属性都具有全局作用域
  3. 最外层函数体外声明的变量也具有全局作用域

最外层的作用域,具有全局作用域的变量可以被任何函数访问。 这样的坏处就是变量间很容易产生冲突,另外该值被修改时很难定位。

函数作用域: 在函数作用域中定义的变量,在函数外部是无法访问的。

ES6 的块级作用域: 只要用花括号包起来的都属于一个块,在其中定义的所有变量在代码块外都是不可见的,称之为块级作用域

要得到一个变量的值,若当前作用域没有定义,就到父级作用域寻找。如果父级作用域中也没找到,就再向上一层寻找,直到找到全局作用域。这种一层一层的关系,就叫做作用域链。

 

posted @ 2020-08-08 16:32  讲故事的人zz  阅读(120)  评论(0编辑  收藏  举报