函数作用域与执行上下文

Posted qqinhappyhappy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数作用域与执行上下文相关的知识,希望对你有一定的参考价值。

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

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

  上下文。

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

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

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

3、执行上下文:

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

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

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

    -this赋值为window

    -开始执行全局代码

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

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

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

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

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

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

    -开始执行函数体

  函数执行上下文栈:

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

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

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

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

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

以上是关于函数作用域与执行上下文的主要内容,如果未能解决你的问题,请参考以下文章

前端面试题(执行上下文与执行上下文栈作用域与作用域链闭包内存溢出与内存泄露)

作用域与函数

js作用域与上下文

作用域与作用域链

JS语法作用域与绑定图示

JS高阶---作用域与作用域链