1.执行上下文环境
javascript在执行代码之前,会先做一些准备工作。找到所有的变量,有的直接为其赋值,有的则先声明并默认赋值为undefined。
在全局作用域中执行代码时,要准备以下三件事;
a、对于变量、函数表达式。则对其进行变量声明,默认赋值为undefined。
b、对于this,直接赋值
c、对于函数声明,直接赋值
在函数体内执行代码时,还需要再做两件事:
d、为函数的形参和arguments对象直接赋值。
e、确定函数体内部自由变量的作用域。
2.执行上下文栈
执行全局作用域中的代码是,会产生执行上下文环境。当调用函数时,也会产生函数执行上下文环境。函数调用完成后,这个函数执行上下文环境以及其中的数据都会被销毁,然后回到全局上下文环境。所以,处于活动状态的执行环境只有一个。。
注意:理想情况下,函数执行环境会被完全销毁,但是也有不能完全销毁的。(由于闭包的存在)
3.作用域
两种:全局作用域和函数作用域。
自由变量:跨作用域取值的变量。
跨作用域取值:到创建该函数的作用域中查找。如果,没有则继续向上找。2.如果该作用域为全局作用域,则没 有找到该变量。