ES6-执行上下文

932 阅读2分钟

执行上下文

每一个代码被调用时,都会产生一个上下文。这里代码分为全局代码和函数代码。

全局代码只有一个,会产生全局执行上下文,函数代码可以有很多,每一个都会产生一个自己的函数执行上下文。

全局执行上下文和函数执行上下文

全局执行上下文相当于windows对象,所有的代码都处于全局执行上下文里。

函数执行上下文是函数内部的空间。那么就会有疑问,那为什么函数f()里是全局执行上下文呢?

 每一个函数(例如f)执行上下文由两部分组成:

 f内部定义的变量,arguments,内部定义的函数

 函数f的父级函数的执行上下文

 父级函数:在定义f时,把直接f包起来的那个函数。如果f外层没有函数,则父级函数就理解全局代码。

当有函数嵌套时,就会形成函数执行上下文栈,这个栈的原则是后入先出,最里层的函数先出栈,里层栈可以调用外层栈的数据。

 执行上下文中保存数据,由两部分组成,1是自己定义的变量,2是父级函数的执行上下文。
 对于全局代码来说,就只有第一部分:自己定义的变量,也就是全局变量。
 执行上下文去调用数据,先在自己定义的变量中找,找不到,就去父级函数的执行上下文去找,如果还找不到,会报错。

照此理解,为什么函数内部的变量函数外面不能调用呢?

  那是因为函数内部的变量属于函数执行上下文。
  当全局执行上下文寻找这个变量时,它只会在自己的执行上下文里去寻找,并不能去函数执行上下文中找,同样的,外层函数执行上下文也不能去内层函数执行上下文里寻找数据。