首页 > 其他 > 详细

变量名与函数名重复

时间:2020-06-17 15:54:47      阅读:70      评论:0      收藏:0      [点我收藏+]

今天遇到一道很有意思的题目

      console.log(c); 
      var c;
      function c(a) {
        console.log(a);   
        var a = 3;
        function a() {}
      }
      c(2);

 小伙伴们的答案是什么呢?

这就涉及到我们的函数和变量的预解析了

 

js‘从上到下运行’,但是可不是运行到哪才执行那一句语句。。

举个栗子:

(现在用let和const没这个问题,会直接报错)

console.log(a);

var a = 0;

输出undefined,而不是直接报错,为什么?

因为浏览器会预解析变量,也就是:

var a;

conso.log(a);

a = 0;

浏览器的预解析不止变量,还有函数声明

1)函数声明会置顶

2)变量声明也会置顶

3)函数声明比变量声明更置顶:(函数在变量上面)

4)变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置

5)声明过的变量不会重复声明

 

说了那么多废话,上面那个才是关键,函数声明的等级高于变量声明,所以上面那道题可以解释为:

     function c(a) {
       function a() {}
       console.log(a);   
       var a = 3;
     }  
     console.log(c); 
     var c;
     c(2);

 

好了,就这样....

 

变量名与函数名重复

原文:https://www.cnblogs.com/vokiinnn/p/13152708.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!