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);

    好了,就这样....

  • 相关阅读:
    git clone time out
    Window版本的nvm下载安装以及配置
    jdk安装目录查询
    idea 快捷键
    faac简介、编译、使用
    socket编程实例TCP
    jsoncpp简介、下载、编译、使用
    时间时区概念及常用时间函数
    开启博客之旅
    找回了用户名和密码
  • 原文地址:https://www.cnblogs.com/vokiinnn/p/13152708.html
Copyright © 2011-2022 走看看