1,预解析的过程。
2,代码的执行过程。
预解析:程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此处进行标记,所谓的标记就是让js解析器知道这个名字,后面在使用这个名字的时候,不会出现未定义的错误,‘这个标记过程就是提升。
## 声明:
1,名字的声明,标识符的声明(变量的声明)
** 名字的声明就是让我们的解析器知道这个名字
** 名字并没有任何数据与之对应
2,函数的声明
** 函数声明包括两部分
** 函数声明与函数表达式的区别,函数声明是单独写在一个结构里面的,不存在任何语句,逻辑判断结构中
### 又如下面的预解析执行过程
function f() {};
** 首先告诉解析器有这个函数名字的存在,该阶段与变量的名字声明一致
** 然后告诉解析器这个名字连接的函数体
### 下面代码的解析执行过程
报错:numb is not a function
报错:
分析过程:
1,预解析代码,提升名字
***首先提升名字 numb
***再提升函数名,但是 numb 已经存在,使用跳过,让名字与函数体对应
***预解析后只有一个名字 numb
2,开始执行代码,从第一句赋值语句开始
***numb 赋值为1
***覆盖了函数体
3,调用numb,由于numb是数字1,因此保错
*****************************************************************************************************************
执行结果:1,undefined
2,456
代码解析与执行过程: