谈一谈 JS 执行上下文
-
JS 并不是一行行解析代码的,而是一段段的分析和执行。
-
当执行一段代码的时候,会在内存中开辟一块区域,并做很多的准备工作比如声明提升,确定作用域链,确定this等等,我们把这个准备工作叫做
执行上下文
。 -
JS 的代码分为3种:1.全局代码 2.局部代码 3.eval代码(不再考虑)。
-
每次进入到一段代码的时候,就会创建相应的执行上下文,因为有很多个执行上下文,所以 JS 会先创建一个执行上下文栈来保存执行上下文。
-
当JS开始执行的时候,就创建了全局执行上下文,并压入执行上下文栈,全局执行上下文在页面关闭时才消失。
-
JS 每次执行函数的时候,会创建局部的执行上下文,并压入栈中,当函数执行完毕的时候,会从栈中弹出。
-
执行上下文包含3个内容:
-
变量对象(VO,var object) 。
-
作用域链。
扫描二维码关注公众号,回复: 12583622 查看本文章 -
this。
-
谈一谈显式原型和隐式原型
- 每一个函数都有一个prototype属性,即显式原型。
- 每一个实例对象都有一个__proto__属性,即隐式原型。
- 对象的隐式原型指向 其 构造函数的显式原型。
注意事项:
- 当函数定义的时候,就已经有了显式原型了,是一个空对象(constructor属性除外),但是只有当前函数实例化对象能够使用。
- 隐式原型在创建对象的时候就自动添加了,当访问对象的属性的时候可能会沿着隐式原型查找。