执行上下文和执行上下文栈
变量提升和函数提升
- 变量提升
- 所用使用var定义的变量,在程序运行前会被先定义,并赋初值为underfind,保存到其执行上下文中
- 函数提升
- 在调用函数,执行函数体之前,会先执行函数定义,初值为函数对象
- 先执行变量提升,在执行函数提升
执行上下文
- 全局执行上下文
- 将window确定为全局执行上下文
- 对全局数据进行预处理
- var定义的变量
- function
- this指向window
- 执行全局代码
- 函数执行上下文
- 在栈中创建虚拟对象,作为函数执行上下文(入栈)
- 对函数局部变量进行预处理
- 形参赋值为实参,添加为函数执行上下文的属性
- 为argument赋值,添加为函数执行上下文的属性
- var定义的变量提前
- function提前
- this指向函数执行上下文
- 执行函数
- 释放上下文对象(出栈)
执行上下文栈
管理和保存所有的执行上下文对象
var c = 1function c(c){c = 2console.log(c)}
c(5) // 05.js:31 Uncaught TypeError: c is not a function at 05.js: 31