1、代码分类:全局代码和函数(局部代码)
代码分为编译(由JS编译器执行)阶段和执行(JS引擎执行)阶段。当代码被编译时,会创建相应的作用域,当代码被执行时,会创建相应的执行
上下文。
2、作用域:是在编译阶段就产生的,一整套函数标识符的访问规则,由函数声明时所在的位置决定。
作用:主要用于隔离变量,不同的作用域中变量名字可以相同
作用域链:多个上下级关系作用域形成的链,由下向上或由内向外。定义了变量的查找规则
3、执行上下文:
1)全局执行上下文:执行全局代码前将window确定为全局执行上下文,对全局数据进行预处理。
-var声明的变量,添加为window属性
-function声明的数,添加为window方法
-this赋值为window
-开始执行全局代码
2)函数执行上下文:在调用函数,执行函数体之前,创建对应的函数执行上下文,对局部数据进行预处理
-实参赋值给形参,添加为执行上下文的属性
-argument赋值实参,添加为函数执行上下文属性
-var声明的变量。赋值underfined,添加为函数执行上下文属性
-function声明的函数,添加为执行上下文的方法
-this->赋值调用当前函数的对象
-开始执行函数体
函数执行上下文栈:
-在全局代码执行前, JS引擎就会创建一个栈来存储管理所有的执行上下文对象
-在全局执行上下文(window)确定后, 将其添加到栈中(压栈)
-在函数执行上下文创建后, 将其添加到栈中(压栈)
-在当前函数执行完后,将栈顶的对象移除(出栈)
-当所有的代码执行完后, 栈中只剩下window
原文地址:https://www.cnblogs.com/qqinhappyhappy/p/11612524.html