@[TOC](预编译(xx声明提升)(函数表达式&函数声明),补充typeof)
JS运行三部曲
- 语法分析
- 预编译
- 解释执行
预编译
函数声明整体提升
变量 声明提升
预编译前奏
预编译
- 创建AO对象
- 找形参和变量声明(包括if语句里面的变量声明),将变量和形参名作为AO属性名,值为undefined
- 将实参值和形参统一
- 在函数体里面找函数声明,值赋予函数体
步骤过程如下:
- 找形参和变量声明
- 实参形参统一 a:1
- 在函数体里面找函数声明,值赋予函数体
执行
补充:
补函数表达式: var a=function(){}
函数声明(提升): function a(){}
预编译不仅仅发生在函数体 还发生在全局
全局:
1.生成了GO对象 GO{}
2.无形参;仅变量声明 undefined
X 3.无形参实参统一
4.函数声明并赋予函数体
GO === window
例A:
执行
例B:
例C:
提升例D:
提升例E:
补充 typeof
只有一种情况(typeof)未定义下不报错,返回undefined
例: