1.从浅显层面来看
定义阶段:声明一个函数
调用阶段:执行一个函数内的代码
2.函数的两个阶段的特点
定义阶段:function 关键字 或者箭头(=>)声明了一个函数空间,里面存储了一段代码
调用阶段:new函数名 或者 函数名(),调用了函数,把存储在函数空间内的代码执行
重点: 函数两个阶段做的事情
(1)定义阶段
1.在堆空间内存开辟一段存储空间
2.把函数里面的代码转换成字符串存储在该空间内,此时并不会解析变量
3.把函数存储空间的地址进行变量赋值
(2)调用阶段
1.根据变量名去找到对应的函数存储空间
2.在调用栈(callstack)内开辟一段新的函数执行空间
3.在执行空间内进行函数的形参赋值
4.在执行空间对函数进行预解析
5.把存储空间内的字符串拿过来当当做js代码完整执行一遍,此时才开始解析变量
6.当函数体内的代码执行完成,开辟的执行空间销毁