阅读 133

面试知识点之javascript中变量与函数重名规则

声明

相信大家都知道变量提升函数提升,可重名的时候又是如何处理?

试问一下2个场景的输出值分别多多少?

  1. 情景一
console.log(a);
var a = 100;
function a () {};
console.log(a);
复制代码
  1. 情景二
console.log(a);
function a () {};
var a = 100;
console.log(a);
复制代码

答案是两个场景输入都是一样的.结果都为:

ƒ a () {}
100
复制代码

解释:

javascript在执行代码之前,有一个预解析代码阶段。此时会先找出代码中函数变量进行提升。 var声明的变量函数声明可细分为三个步骤:①创建②初始化③赋值。例如表达式var a = 100;

  1. 首先创建变量a;
  2. 其次初始化undefined
  3. 最后赋值为100

有了以上前提,我们再来说一下在预解析阶段对于变量函数都有哪些提升

  1. var创建初始化被提升;在执行阶段才进行赋值
  2. 函数创建初始化赋值都被提升;
  3. let创建被提升;
  4. 函数声明优先变量声明

通过以上规则我们就可以解释为什么情景一情景二输出都是一样了。因为在重名时 函数更优先。

面试推荐

关于this的3大总结

关注下面的标签,发现更多相似文章
评论