2. 原型链_作用域链_预处理_预解析

Posted tianxiaxuange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2. 原型链_作用域链_预处理_预解析相关的知识,希望对你有一定的参考价值。

1. 谈谈原型

能够实现继承,对象查找属性的规则

实例对象的隐式原型的值 为其 对应构造函数的 显式原型的值

  • prototype 显示原型属性

所有函数都有显示原型属性

  • __proto__ 隐式原型属性

所有实例对象都有隐式原型属性

所有函数都是 Function 的实例

Function 是通过 new 自己产生的实例

2. 谈谈原型

 由多个隐式原型属性构成的链状结构就是原型链

作用: 用来查找对象的 属性/方法

先自身找,找不到再去 __proto__ 找,最终找到 Object.prototype.__proto__ 上,返回 undefined

3. 作用域链

多个上下级关系的作用域形成的链, 它的方向是从小向大的(从内到外)

作用:查找变量的规则

先自身作用域找,找不到再上一级找,最终来到全局作用域,找不到就报错(xxx is not defined)

4. 预解析、预处理做了什么事?

  • 全局代码:
  • js 引擎在将要执行全局代码之前,创建一个全局执行上下文对象 window
  • 将 var 关键字声明的变量,添加为 window 属性,值为 undefined
  • 将 function 关键字声明的函数,添加 window 方法,值为函数体
  • 确定全局 this 指向,指向为 window
  • 函数代码:
  • js 引擎在将要执行函数代码之前,创建一个函数执行上下文对象(没办法直接操作)
  • 将 var 关键字声明的变量,添加为函数执行上下文对象属性,值为undefined
  • 将 function 关键字声明的函数,添加函数执行上下文对象方法,值为函数体
  • 将形参赋值为实参,添加为函数执行上下文对象的属性
  • 将传入的实参添加到 arguments 中, 添加为函数执行上下文对象的属性
  • 确定 this 的指向, 添加为函数执行上下文对象的属性

5. 完整原型图

https://www.cnblogs.com/tianxiaxuange/p/9800827.html

 

以上是关于2. 原型链_作用域链_预处理_预解析的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript原型链与作用域链

js-高级(原型与原型链作用域与作用域链闭包)

javascript的作用域链变量提升及预解析

javascript的作用域链变量提升及预解析

javascript的作用域链变量提升及预解析

Python全栈__动态参数名称空间作用域作用域链加载顺序函数的嵌套globalnonlocal