zoukankan      html  css  js  c++  java
  • 变量名与函数名重复

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

          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)声明过的变量不会重复声明

     注意:函数变量在下面重新赋值的话会覆盖掉函数声明(只声明就不会,栗子:var obj;)

    function obj(){
      console.log('函数声明')
    }
    var obj = 'test'
    obj()       // 报错,obj is not a function
    

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

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

    好了,就这样....

  • 相关阅读:
    DDT驱动selenium自动化测试
    python 对Excel表格的读取
    python 对Excel表格的写入
    selenium对百度进行登录注销
    selenium的八大定位元素的方式
    selenium打开Chrome浏览器并最大化
    行列式计算的归纳
    C标准库函数getchar()
    测试必备-抓包工具的使用
    uiautomator2使用教程
  • 原文地址:https://www.cnblogs.com/vokiinnn/p/13152708.html
Copyright © 2011-2022 走看看