函数作用域与执行上下文

1、代码分类:全局代码和函数(局部代码)

  代码分为编译(由JS编译器执行)阶段和执行(JS引擎执行)阶段。当代码被编译时,会创建相应的作用域,当代码被执行时,会创建相应的执行

  上下文。

2、作用域:是在编译阶段就产生的,一整套函数标识符的访问规则,由函数声明时所在的位置决定。

  作用:主要用于隔离变量,不同的作用域中变量名字可以相同

  作用域链:多个上下级关系作用域形成的链,由下向上或由内向外。定义了变量的查找规则

3、执行上下文:

  1)全局执行上下文:执行全局代码前将window确定为全局执行上下文,对全局数据进行预处理。

    -var声明的变量,添加为window属性

    -function声明的数,添加为window方法

    -this赋值为window

    -开始执行全局代码

  2)函数执行上下文:在调用函数,执行函数体之前,创建对应的函数执行上下文,对局部数据进行预处理

    -实参赋值给形参,添加为执行上下文的属性

    -argument赋值实参,添加为函数执行上下文属性

    -var声明的变量。赋值underfined,添加为函数执行上下文属性

    -function声明的函数,添加为执行上下文的方法

    -this->赋值调用当前函数的对象

    -开始执行函数体

  函数执行上下文栈:

    -在全局代码执行前, JS引擎就会创建一个栈来存储管理所有的执行上下文对象

    -在全局执行上下文(window)确定后, 将其添加到栈中(压栈)

    -在函数执行上下文创建后, 将其添加到栈中(压栈)

    -在当前函数执行完后,将栈顶的对象移除(出栈)

    -当所有的代码执行完后, 栈中只剩下window  

你可能感兴趣的:(函数作用域与执行上下文)