声明
相信大家都知道变量提升,函数提升,可重名的时候又是如何处理?
试问一下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创建被提升;- 函数声明优先变量声明;
通过以上规则我们就可以解释为什么情景一和情景二输出都是一样了。因为在重名时 函数更优先。