zoukankan      html  css  js  c++  java
  • js变量提升

      首先先看下变量提升的规则

        1.变量声明、函数声明都会被提升到作用域顶处;

        2.当出现相同名称时,优先级为:变量声明 < 函数声明 < 变量赋值

      接下来看一个例子:

    var foo =function(x, y){
       return x - y;
    }
    function foo(x, y){
       return x + y;
    }
    var num = foo(1, 2);
    console.log(num);//-1

      咋一看,结果应该是3,后面的同名函数覆盖前一个函数才对,实则这是变量提升导致的,我们看下代码在js编译器的实际运行顺序,结合规则看下你就懂了。

    //规则1,所有变量声明和函数声明提到作用域顶部
    var foo;//foo#1
    var num;
     
    //规则2 所以函数声明在变量声明之后
    function foo(x, y){//foo#2
       return x + y;
    }
     
    //函数函数表达式不会被提升
    foo =function(x, y){//foo#3
       return x - y;
    }
     
    num = foo(1, 2);//变量赋值
    //优先级越高,在js编译器的顺序越靠后,同名的值后面覆盖前面的。

      由此可见,foo变量所代表的地址最终的指向相减函数所在的内存。所以执行结果就是-1而不是3。看完这个例子想必你也知道变量提升是啥子了。

      另外ES6中class声明的构造函数不会变量提升

    new Foo(); //ReferenceError
    class Foo {}
  • 相关阅读:
    读图,特征提取——形状
    5.2 SW1控制LED1亮灭(中断功能)
    3、寄存器
    5.1、按键SW1控制LED1亮灭
    4.2、LED1、LED2交替闪烁
    2、编程工具IAR、烧写工具SmartRF的使用
    4.1、实现4个LED灯同时闪烁
    1、CC2530单片机介绍
    装windows系统教程
    连接夜神模拟器
  • 原文地址:https://www.cnblogs.com/angle-xiu/p/11419103.html
Copyright © 2011-2022 走看看