一、变量的声明
1.变量未声明直接使用,报错。
2.变量未声明赋值,不报错。此时该变量为全局变量。
二、预编译
1.若单从(函数声明整体提升,变量 ‘声明’提升)解题,不能从根本上解决一些较复杂问题。
例:猜猜控制台的打印结果。
2.函数的预编译
预编译发生在函数执行的前一刻。
- 创建AO对象;
- 找形参和变量声明,值为undefined;
- 将实参与形参相统一;
- 在函数体中寻找函数声明,赋值函数体。
第一步:创建AO
第二步:AO{ a:undefined;b:undefined;找到形参、变量声明、函数声明 a 和函数声明 d}
第三步:AO{a:1; b: undefined;a 实参形参相统一}
第四步AO{a:function a(){}; b:undefined; d:function(){};a赋值函数体,函数声明 d 赋值函数体}
结合函数分析:
结果为:
3.全局的预编译
即为GO,GO的过程和AO类似,只是没有第三步。
- 创建AO对象;
- 找形参和变量声明,值为undefined;
- 在函数体中寻找函数声明,赋值函数体。
例1
例2
最后知识强化题(答案在下一期作用域链中公布)
博主开始运营自己的公众号啦,感兴趣的可以关注“飞羽逐星”微信公众号哦,拿起手机就能阅读感兴趣的博客啦!