作用域与作用域链

522 阅读1分钟

理解

  • 相对于上下文对象它是静态的,在编写代码时就确定了
  • 函数执行上下文,函数调用时才产生

分类

  • 全局作用域
  • 函数作用域
  • 块作用域,块作用域实际就是大括号作用域
    • 注意:var定义的变量没有块级作用域,let和const定义的变量有 image.png 实际上这个 c 能打印出来,这时就是没有块作用域

作用

  • 隔离变量,不同作用域下同名变量不会有冲突

产生了几个作用域:

x + y + 1 x是定义了几个函数,y是除函数外有几个块级作用域,1是全局作用域

  • 首先最外层是全局作用域
  • 接着看定义了几个函数,有几个块级作用域 image.png

作用域与执行上下文的区别:

image.png

image.png

找变量是先在当前作用域所对应的上下文中查找,若找不到,再去外部所对应的执行上下文中查找,直至全局执行上下文

image.png

作用域链:找变量是沿着作用域链查找的

image.png

题目练手:

1

image.png

10

2

image.png //fn2 is not defined

如果想找这个对象内部的 fn2 ,正确做法是:this指向调用它的对象:

image.png

image.png