作用域链:
- 当代码在一个环境中执行时,会创建变量对象组成的一个作用域链,保证对执行环境有权访问的所有变量和函数的有序访问。(重要)
- 作用域链的前端,始终是当前执行上下文变量对象
- 全局执行环境的变量对象(window)始终都是作用域链中的最后一个对象。
- 作用域链是在函数声明的时候已经创建了,当函数被调用的时候创建了自己的变量对象,才补全了作用域链
- 标识符解析是沿着作用域链一级一级地搜索标识符的过程。搜索过程始终从作用域链的前端开始,然后逐级地向后寻找,直至找到标识符为止(如果找不到标识符,通常会导致错误发生)
原型链:
- 每一个构造函数都有一个prototype属性指向其原型对象
- 所有的实例对象都有__proto__属性, 它指向其构造函数的原型对象
- 一个对象通过__proto__属性就形成了一个链的结构===>原型链
- 当查找对象的属性/方法时, js引擎自动沿着这个原型链查找
- 当给对象属性赋值时不会使用原型链, 而只是在当前对象中进行操作