作用域与作用域链:作用域 作用域与执行上下文 作用域链 测试题

作用域

1.理解

就是一块"地盘",一个代码段所在的区域
它是静态的(相对于上下文对象),在编写代码时就确定了

2.分类

(1)全局作用域
(2)函数作用域
(3)没有块作用域(ES6有了)

3.作用

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

作用域与执行上下文

1.区别1

全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定,而不是在函数调用时。
全局执行上下文环境是在全局作用域确定之后,js代码马上执行之前创建
函数执行上下文是在调用函数时,函数体代码执行之前创建

2.区别2

作用域是静态的,只要函数定义好了就一直存在,且不会再变化
执行上下文是动态的,调用函数时创建,函数调用结束时就会自动释放

3.联系

执行上下文(对象)是从属于所在的作用域
全局执行上下文 ----> 全局作用域
函数执行上下文 ----> 对应的函数作用域

作用域链

1..理解

嵌套的作用域由内向外的一个结构
查找变量时就是沿着作用域链来查找的

2.查找一个变量的查找规则

(1)在当前作用域下的执行上下文中查找对应的属性,如果有直接返回,否则进入(2)
(2)在上一级作用域的执行上下文中查找对应的属性,如果有直接返回,否则进入(3)
(3)再次执行(2)的相同操作,直到全局作用域,如果还找不到就抛出找不到的异常

测试题

测试题1

 

测试题2

 

测试题3

怎样找到a.b,先找作用域链找到a对象,再找原型链找a的属性b,第一个找不到就报错,第二个找不到就返回undefined

学识浅薄,如有错误,恳请斧正,在下不胜感激。

原文地址:https://www.cnblogs.com/yin-jie/p/14751162.html