js执行环境总结

1. 执行上下文:

Execution Content:函数执行前的准备工做git

2. JS执行环境

* 全局做用域
* 函数做用域
* eval做用域(不推荐使用eval,暂时忽略)
* 块级做用域 ES6新增
复制代码

3. JS是如何管理执行上下文?

经过栈(先进后出,后进先出的一种数据结构)的存取方式管理,称为"执行栈"或"调用栈"github

4. 函数调用栈

js执行 最早进入全局环境,因此处于"栈底的永远是全局环境的执行上下文",出于"栈顶的是当前正在执行函数的执行上下文",当函数调用完成后,它就会从栈顶被推出去(出栈,闭包会阻止)数据结构

注意: 全局环境只有一个,对应的全局执行上下文也只有一个,只有当页面被关闭以后它才会从执行栈出栈,不然一直存在于栈底闭包

5. 执行上下文的生命周期

1.建立阶段: 函数被调用时,进入函数环境,建立执行上下文。
2.执行阶段: 函数中的代码执行时,执行上下文进入执行阶段


建立阶段:
        1. 建立变量对象 
            
            1.1 Arguments 对象(已赋值)
            1.2 函数声明 (已赋值)
            1.3 变量声明,函数表达式声明(未赋值)
            
        2. 肯定this (调用者肯定)
        
        3. 肯定做用域(词法环境决定)
        
执行阶段:
        1. 变量对象赋值
        
            1.1 变量赋值
            1.2 函数表达式赋值
        
        2. 调用函数
        
        3. 顺序执行其余代码
复制代码

6. 变量对象和活动对象的区别?:

当进入到一个执行上下文后,这个变量对象才会被激活,因此叫活动对象(AO),这时候活动对象上的各类属性才能被访问。函数

注意:建立阶段对函数声明作赋值,变量及函数表达式仅作声明,真正的赋值操做要等到行上下文代码执行阶段this

7.执行上下文的数量限制(堆栈溢出)

原文连接spa

相关文章
相关标签/搜索