预编译,(函数表达式&函数声明),typeof

JS运行三部曲

  • 语法分析
  • 预编译
  • 解释执行

函数声明整体提升
变量 声明提升

预编译,(函数表达式&函数声明),typeof_第1张图片

预编译前奏

预编译,(函数表达式&函数声明),typeof_第2张图片
预编译,(函数表达式&函数声明),typeof_第3张图片

预编译

  1. 创建AO对象
  2. 找形参和变量声明(包括if语句里面的变量声明),将变量和形参名作为AO属性名,值为undefined
  3. 将实参值和形参统一
  4. 在函数体里面找函数声明,值赋予函数体

步骤过程如下:

预编译,(函数表达式&函数声明),typeof_第4张图片
3.
预编译,(函数表达式&函数声明),typeof_第5张图片
4.
预编译,(函数表达式&函数声明),typeof_第6张图片
执行
预编译,(函数表达式&函数声明),typeof_第7张图片
预编译,(函数表达式&函数声明),typeof_第8张图片
补充:
函数表达式: var a=function(){}
函数声明(提升): function a(){}

预编译,(函数表达式&函数声明),typeof_第9张图片

预编译不仅仅发生在函数体 还发生在全局

全局:
1.生成了GO对象 GO{}
2.无形参;仅变量声明 undefined
X 3.无形参实参统一
4.函数声明并赋予函数体

GO === window
预编译,(函数表达式&函数声明),typeof_第10张图片
例A:
预编译,(函数表达式&函数声明),typeof_第11张图片
在这里插入图片描述
执行
预编译,(函数表达式&函数声明),typeof_第12张图片
例B:
预编译,(函数表达式&函数声明),typeof_第13张图片
例C:
预编译,(函数表达式&函数声明),typeof_第14张图片
预编译,(函数表达式&函数声明),typeof_第15张图片
提升例D:
预编译,(函数表达式&函数声明),typeof_第16张图片
提升例E:
预编译,(函数表达式&函数声明),typeof_第17张图片

补充 typeof

只有一种情况(typeof)未定义下不报错,返回undefined
在这里插入图片描述
例:
预编译,(函数表达式&函数声明),typeof_第18张图片

你可能感兴趣的:(javascript基础)