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 {}
  • 相关阅读:
    数据结构(线性结构-栈)
    数据结构(线性结构-队列)
    数据结构(树状结构-二叉树)
    数据结构(树状结构-树)
    数据结构(线性结构-串)
    数据结构(堆)
    数据结构(图)
    查找(静态查找表)
    查找(动态查找表)
    查找(哈希表)
  • 原文地址:https://www.cnblogs.com/angle-xiu/p/11419103.html
Copyright © 2011-2022 走看看