执行上下文

三个属性:
变量对象 作用域链 和this

在ES5中只有两种上下文,就是全局上下文和函数上下文

全局上下文的变量对象初始化是全局变量
函数上下文的变量对象初始化就只有arguments对象

在进入执行上下文时,会给变量对象添加变量声明,函数声明和形式参数
当函数执行时,会再次去修改变量对象的值

举个例子来说吧:

function foo(a){
			var b=3;
			function c(){};
			var d = function(){}
			b=4;
		}
		
		foo(1);
		

在进入执行上下文时,变量对象是:

AO{
			arguments:{
				0:1  ,//第一个参数
				length:1
			},
			a:1,
			b:undefined,
			c:function,
			d:undefined
		}

当函数执行时:(会再次修改变量对象的值)
此时变量对象将变为活动对象AO:

AO{
			arguments:{
				0:1,
				length:1
			},
			a:1,
			b:4,
			c:function,
			d:reference to functionexpression d
			
		}

值得注意的是,在执行上下文中,首先得到处理的是函数声明,其次是处理变量声明。
如果变量名称跟已经声明的形参或函数相同的话,它将不会影响这些已经存在的属性

比如说:

console.log(foo);
		function foo(){
			console.log("2");
		}
		var foo = 1;

执行的结果将是打印出函数,而不是1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值