理解
- 相对于上下文对象它是静态的,在编写代码时就确定了
- 函数执行上下文,函数调用时才产生
分类
- 全局作用域
- 函数作用域
- 块作用域,块作用域实际就是大括号作用域
- 注意:var定义的变量没有块级作用域,let和const定义的变量有 实际上这个 c 能打印出来,这时就是没有块作用域
作用
- 隔离变量,不同作用域下同名变量不会有冲突
产生了几个作用域:
x + y + 1 x是定义了几个函数,y是除函数外有几个块级作用域,1是全局作用域
- 首先最外层是全局作用域
- 接着看定义了几个函数,有几个块级作用域
作用域与执行上下文的区别:
找变量是先在当前作用域所对应的上下文中查找,若找不到,再去外部所对应的执行上下文中查找,直至全局执行上下文
作用域链:找变量是沿着作用域链查找的
题目练手:
1
10
2
//fn2 is not defined
如果想找这个对象内部的 fn2 ,正确做法是:this指向调用它的对象: