当我们输入一段JS代码会先编译再执行。
1.在编译阶段会将输入的代码分成执行上下文和可执行代码,执行上下文是JS执行一段代码时的运行环境,在执行上下文中存在一个变量环境,该对象中保存了变量提升的内容,经过var声明的变量JS会在变量环境中创建一个对应的属性,并使用undefined进行初始化,而经过function定义的函数则会存储到堆中,并在变量环境中创建一个对应的属性该属性值指向堆中函数的位置,如果是相同变量或者函数名前面的会被后面的替换掉。
2.JavaScript 引擎开始执行“可执行代码”,按照顺序一行一行地执行,当执行到函数和变量的时候都会去变量环境中查找。
什么是执行上下文?
思考怎么才算是一段”代码“?
1. 当 JavaScript 执行全局代码的时候,会编译全局代码并创建全局执行上下文,而且在整个页面的生存周期内,全局执行上下文只有一份。
2. 当调用一个函数的时候,函数体内的代码会被编译,并创建函数执行上下文,一般情况下,函数执行结束之后,创建的函数执行上下文会被销毁。
3. 当使用 eval 函数的时候,eval 的代码也会被编译,并创建执行上下文。