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

    js 变量提升和函数提升

    我们先来看看这段代码的输出结果。

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

    答案如下,这是为什么呢??

    原理如下

    1. 函数声明会置顶
    2. 变量声明也会置顶
    3. 在作用域中,不管是变量还是函数,都会提升到作用域最开始的位置,不同的是,函数的提升后的位置是在变量提升后的位置之后的,也就是函数提升在变量提升上。
    4. 变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置
    5. 声明过的变量不会重复声明

    以上代码等同于

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

    或者更仔细的写法

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

    下面还有以下例子

    // 代码段1
    function foo() {
      var a = 1;
      function a() {}
      console.log(a);
    }
    foo();
    
    // 代码段2
    function foo() {
      var a;
      function a() {}
      console.log(a);
    }
    foo();
    
    

    会输出什么呢?

    答案是

    1 , function a() {}
    
    

    相当于

    function foo() {
        var a;
        function a() {}
        a = 1;
        console.log(a);
    }
    foo();
    
    function foo() {
        var a;
        function a() {}
        console.log(a);
    }
    foo();
    
    
  • 相关阅读:
    HDU 1098 Ignatius's puzzle 也不大懂
    HDU 1099 Lottery
    图算法-Prime
    并查集
    CSS笔记2
    css笔记1
    HDU 5019 Revenge of GCD
    POJ 2255 Tree Recovery
    判断两条线段是否相交
    PAT 数列求和-加强版   (20分)(简单模拟)
  • 原文地址:https://www.cnblogs.com/hustshu/p/14864340.html
Copyright © 2011-2022 走看看