JavaScript执行上下文详解

执行上下文

在程序开始运行的时候,代码分为两种:

1.全局代码

2.函数代码(局部代码)

全局执行上下文

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

  • var定义的全局变量变为undefined,并添加window属性

  • function声明的全局函数进行赋值,并添加为window方法

  • 将this赋值为window

函数执行上下文

在调用函数体之前,要执行函数上下文,创建对应的函数执行上下文对象,就相当于在内存中新开辟一块栈空间用来存储变量。

对局部数据进行预处理

  • 形参赋值,并添加为上下文属性
  • arguments赋值,并添加为上下文属性
  • var定义的局部变量,里面函数的声明和this的赋值都与上面的全局执行上下文相同。

上下文栈

在程序执行的时候,会产生多个上下文对象,所以需要用上下文栈管理起来。

var a = 10
var bar = function(x){
var b = 5
foo(x+b)
}

var foo = function(y){
var c = 5
console.log(a+c+y)
}
bar(10)

step1:var a = 10

上下文栈
全局上下文环境

step2:bar(10)

上下文栈
bar函数上下文环境
全局上下文环境

step3:foo(x+b)

上下文栈
foo函数上下文环境
bar函数上下文环境
全局上下文环境

step4:依次出栈

测试题

1

console.log(i)
var i = 1
foo(1)
function foo(i){
	if(i==4){
	return 
	}
	console.log("begin"+i)
	foo(i+1)
	console.log("end"+i)
}
console.log("endless"+i)

undefined

begin1

begin2

begin3

end3

end2

end1

endless4

2

function a(){}
var a
console.log(typeof a)

function

先执行变量提升,再执行函数提升

3

if(!(b in window)){
var b = 1;
}
console.log(b)

4

var c = 1
function c(c){
console.log(c)
}
c(2)

报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值