JS运行三部曲

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

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

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

预编译前奏

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

预编译

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

步骤过程如下:

预编译,(函数表达式&函数声明),typeof
3.
预编译,(函数表达式&函数声明),typeof
4.
预编译,(函数表达式&函数声明),typeof
执行
预编译,(函数表达式&函数声明),typeof
预编译,(函数表达式&函数声明),typeof
补充:
函数表达式: var a=function(){}
函数声明(提升): function a(){}

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

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

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

GO === window
预编译,(函数表达式&函数声明),typeof
例A:
预编译,(函数表达式&函数声明),typeof
预编译,(函数表达式&函数声明),typeof
执行
预编译,(函数表达式&函数声明),typeof
例B:
预编译,(函数表达式&函数声明),typeof
例C:
预编译,(函数表达式&函数声明),typeof
预编译,(函数表达式&函数声明),typeof
提升例D:
预编译,(函数表达式&函数声明),typeof
提升例E:
预编译,(函数表达式&函数声明),typeof

补充 typeof

只有一种情况(typeof)未定义下不报错,返回undefined
预编译,(函数表达式&函数声明),typeof
例:
预编译,(函数表达式&函数声明),typeof

相关文章:

  • 2021-08-20
  • 2020-02-25
  • 2021-11-08
  • 2021-01-04
  • 2021-10-12
  • 2022-01-15
  • 2021-12-05
  • 2021-08-30
猜你喜欢
  • 2020-06-02
  • 2018-09-06
  • 2020-03-13
  • 2017-11-25
  • 2019-03-12
  • 2018-09-06
  • 2021-12-25
  • 2021-08-20
相关资源
相似解决方案