js执行上下文

js执行上下文

JavaScript中执行环境

1.全局环境
2.函数环境
3.eval函数环境(已不推荐使用)

那么与之对应的执行上下文类型同样有三种

1.全局执行上下文
2.函数执行上下文
3.eval函数行上下文

JavaScript运行时首先会进入全局环境,对应会产生全局上下文。程序代码中基本都会有函数的存在,那么调用函数,就会进入函数执行上环境,对应就会产生函数的执行上下文。

我们都知道,JavaScript是单线程。所以同一时间只能执行一个任务,完成之后才继续下一个任务。既然是这样,那必须有一个排队机制。

JavaScript中管理多个执行上下文

函数编程中,代码中会声明多个函数,对应的执行上下文也会产生多个。在JavaScript中,通过栈的存取方式来管理执行上下文,我们可以称其为执行栈,或函数调用栈(Call Stack)。

在说明栈之前,先给大家看一下栈的结构:
如图:
在这里插入图片描述
(栈数据结构)

遵循‘先进后出,后进先出’的规则或称LIFO(“Last In First Out”)规则。

总结栈数据结构的特点:
1.先进后出,后进先出
2.出口在顶部,且仅只有一个

列:

function foo() {
 function
 bar() {
 return 'I am bar';
 }
 return bar();
}
foo();

上面代码如下图分析:
在这里插入图片描述
那么下面代码一共有多少个上下文:

(function foo(i) {
 if (i == 3) {
 return;
 } else {
 console.log(i);
 foo(++i);
 }
})(0);
//全局上下文
//函数上下文0
//函数上下文1
//函数上下文2
//函数上下文
//共产生5个上下文,其中1个全局,4个函数上下文

产生函数上下文,会经历两个阶段:创建阶段、执行阶段
创建阶段:要做的事(确定变量、确定作用域链、确定this的指向
变量对象(arguments对象、形式参数、字面量函数声明、变量
执行阶段:执行每一行代码

vo:

(function () {
    console.log(typeof foo);
    console.log(typeof bar);
    var foo = "Hello";
    var bar = function () {
        return "World";
    }
    function foo() {
        return "good";
    }
    console.log(foo, typeof foo);
})()

分析vo:
fooExecutionContext = { 
    variavleObject: { 
        arguments: { length: 0 }, 
        foo: pointer to function foo(), 
        bar: undefined 
    }, 
        scopeChain: {}, 
        this: {} 
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值