执行上下文

1:   代码分类(位置)

      全局代码

      函数(局部)代码

2:   全局执行上下文

     在执行全局代码前将window 确定为全局执行上下文

     对全局函数进行预处理

       2.1:   var  定义的全局变量 ===> undefined,  添加为window 的属性

      2.2:    function 声明全局函数 ===> 赋值 (fun),  添加为window 的方法

      2.3:   this ===> 赋值 (window)

      2.4:  开始执行全局代码

3:   函数执行上下文

    3.1:  在调用函数,  准备执行函数体之前,  创建对应的函数执行上下文对象

            对局部数据进行预处理

            形参变量  ==> 赋值 (实参) ==>  添加为执行上下文的属性

           arguments  ===> 赋值 (实参列表),   添加为执行上下文属性

           var 定义为全局变量 ===> undefined,   添加为执行上下文属性

           function 声明的函数   ===> 赋值 (fun),    添加为执行上下文的方法

           this  ===> 赋值  (调用函数的独对象)

       开始执行函数体代

----------------------------------------------------------------------------------------------------------------------

在我执行全局代码之前已经存在了

console.log(this);  在执行代码块之前:   this 已经存在了

var a1 = 10;
console.log(a1);  // 10
console.log(this.a1);  // 10   this  指向全局window
window: 代表整个窗口, 创建一个变量在全局执行上下文查找, 存在全局window 中
// 函数执行上下文
function fn(a1) {
   console.log(a1);  // 2
   console.log(a2);  // undefined
   a3();  // a3()
   console.log(this);  // window 全局
   console.log(argumnets);  // [2 , 3]  伪数组

   var a2 = 3;
   function a3() {
     console.log('a3()')
   }
}

fn(2, 3);
内存空间是隔离的, 相互不会影响。
变量/  函数提升就是预处理。
-------------------------------------------------------------
执行上下文栈
1: 在全局代码执行前  js引擎就会创建一个栈来存储管理所有的执行上下文对象。
2: 在全局执行上下文创建后, 将其添加到栈中(压栈)
3: 在函数执行上下文创建后, 将其添加到栈中(压栈)
4: 在当前函数执行完成以后, 将栈顶的对象移除(出栈)
5: 当所有的代码执行完毕以后, 栈中只剩下window 
-------------------------------------------------------------
创建上下文对象, 函数被调用了就会创建词一个上下文对象,  n + 1
n: 代表函数被调用次数   1: 全局对象window 对象
栈是一种数据结构: 先进后出,   后进先出
一个函数执行完会释放内存空间,当前执行总是栈顶的那个上下文。

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值