javascript-执行上下文(执行上下文环境)

执行上下文:

当出现js代码时,就出现了执行上下文,或叫做执行上下文环境。一般来说,执行上下文完成以下工作:

1.变量和函数表达式,先声明,与位置无关(也叫做变量声明提升),默认值是undefined,注意是函数表达式;比如

console.log(a);

var a = 10;  输出是undefined,因为不是a is not declared,故说明了a已经定义了(变量声明提升),其真正的语句执行顺序是

var a;

console.log(a);

a = 10

应该是很清晰了。如果把a的值换成函数表达式,同理。

2.this,必然会被指向某个对象;

3.函数声明,声明+赋值,注意这里和函数表达式是有区别的,比如

console.log(a)

function a(){}     输出function a(){},也就是说函数声明的时候直接被函数赋值

4.执行上下文不是一成不变的。执行上下文有始有终,从js的第一行代码开始就开始存在,那么什么时候结束?好问题,这里就牵扯到执行上下文栈的作用了(下节讲)。执行上下文存在的这一段时间不是一成不变的,因为代码要运行,上下文环境就会变化,比如变量赋值、参数赋值等。比如全局执行上下文环境,会有变量赋值;函数中存在的相应的上下文环境会有参数赋值、arguments赋值等。

因此,在执行上下文中,做了这三项工作,这三项工作也构成了执行上下文。也就是说,js代码在运行时需要有一个准备环境,比如变量的声明准备,所以这个环境就被称为了执行上下文环境,是为执行语句做准备工作的。

综合上述4点,执行上下文:在执行代码执行之前,执行上下文所需要的变量都准备好,或被赋值,或被undefied赋值。

当然,这个环境要分多种情况,最常见的是在全局环境下的执行上下文;还有在函数作用域中的执行上下文;还有eval(不推荐使用)

你可能感兴趣的:(javascript-执行上下文(执行上下文环境))