相信大家都知道 变量提升 , 函数提升 ,可重名的时候又是如何处理?
试问一下2个场景的输出值分别多多少?
- 情景一
console.log(a);
var a = 100;
function a () {};
console.log(a);
- 情景二
console.log(a);
function a () {};
var a = 100;
console.log(a);
答案是两个场景输入都是一样的.结果都为:
? a () {}
100
解释:
javascript在执行代码之前,有一个预解析代码阶段。此时会先找出代码中 函数 和 变量 进行提升。 var 声明的变量 和 函数声明 可细分为三个步骤: ①创建②初始化③赋值 。例如表达式 var a = 100;
- 首先 创建变量 a;
- 其次 初始化 为 undefined ;
- 最后 赋值 为100
有了以上前提,我们再来说一下在 预解析阶段 对于 变量 和 函数 都有哪些 提升 。
- var 的 创建 和 初始化 被提升;在 执行阶段 才进行 赋值 ;
- 函数 的 创建 、 初始化 和 赋值 都被提升;
- let 创建 被提升;
- 函数声明 优先 变量声明 ;
通过以上规则我们就可以解释为什么 情景一 和 情景二 输出都是一样了。因为在重名时 函数更优先。
喜欢小编的可以点个赞关注小编哦,小编每天都会给大家分享文章。
我自己是一名从事了多年的前端老程序员,小编为大家准备了新出的前端编程学习资料,免费分享给大家!
如果你也想学习前端,可以观看【置顶】文章。也可以私信【1】 领取最新前端练手实战项目