zoukankan      html  css  js  c++  java
  • JS中变量名和函数名重名

    var a=100;
    function a(){
      console.log(a);
    }
    a();// a is not a function

     原来

    1. 函数声明会置顶
    2. 变量声明也会置顶
    3. 函数声明比变量声明更置顶
    4. 变量和复制语句一起书写,在js引擎解析时,会将其拆成声明和赋值两个部分,声明置顶,赋值保留在原来的位置
    5. 声明或的变量不会重复声明

    实际上这段代码等同于

    var a; //函数声明
    var a; //变量声明(实际上这里不会重复声明了)
    a = function(){ console.log(a); }; //函数赋值
    a = 100;//变量赋值(给a重新赋值了)
    a()//a is not a function

    而如果代码会如下写法则a方法会执行

    var a; //函数声明
    var a; //变量声明(实际上这里不会重复声明了)
    a = 100; 
    a=function(){console.log(123)}//函数赋值
    a()//123 
    

      一道有意思的题目

    function Foo() {
      getName = function () { alert (1); }; //运行这个函数重新赋值了 getName
      return this;
    }
    Foo.getName = function () { alert (2);};
    Foo.prototype.getName = function () { alert (3);};
    var getName = function () { alert (4);};
    function getName() { alert (5);}
    
    //请写出以下输出结果:
    Foo.getName();   // 3
    getName();  // 4                  
    Foo().getName();  // 1      
    getName();   // 1         
    new Foo.getName();   // 2        
    new Foo().getName();    // 3    
    new new Foo().getName(); // 3
    

      

     

  • 相关阅读:
    Nginx-limit_req限速配置示例
    Linux-配置虚拟IP实例
    jQuery中获取a标签的值
    js时间格式化
    a标签与js的冲突
    spring MVC页面的重定向
    EL表达式遍历集合获取下标
    商城项目之实战-购物车模块
    js中得计算问题算式结果拼接成字符串怎么解决
    js中数值类型相加变成拼接字符串的问题
  • 原文地址:https://www.cnblogs.com/Ewarm/p/11927616.html
Copyright © 2011-2022 走看看