zoukankan      html  css  js  c++  java
  • 变量提升:函数表达式 和 函数声明在变量提升时的差异

    1.什么是变量提升?

    JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
    
    JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
     

    例如:先使用后声明

    console.log(a) // undefined
    var a = 2
    
    相当于:
    var a;
    console.log(a); // undefined
    a = 2;
    

    2.表达式与函数声明提升时的差异?

    // 函数声明
    function funDeclaration(type){
        return type==="Declaration";
    }
    // 函数表达式
     var funExpression = function(type){
         return type==="Expression";
    }
    

    函数表达式和函数声明的区别:

    1.函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。
    2.函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。
    3.函数声明可以先调用再声明,而函数表达式必须先定义再调用。
    

    4. 函数声明 和 函数表达式,在定义前使用的区别?

    函数声明:

    在定义前使用,依然可以获取到函数声明里面的值。

     foo()  // 1
     function foo() {
       console.log('1')
     }

    函数表达式:

    而函数表达式执行时则不然,只会将变量提升,暂赋值undefined,赋值或其他逻辑运行会留在原地

      test(); // Uncaught TypeError: test is not a function
    
      var test = function () {
        console.log('函数表达式=', 111);
      }
    

    5.函数声明优先于表达式?

    一:遇到同名的变量提升则被会略

    foo() // 3
    var foo = 5;   
    function foo() {
      console.log('3')
    }
    

    foo()函数声明,在遇到同名的变量声明var foo = 5; 

    则函数声明会忽略变量声明,直接赋值函数声明的值。

    二:遇到同名的函数变量,后面的会覆盖前面的函数声明

    foo() // 4
    function foo() {
      console.log('3')
    }
    function foo() {
      console.log('4')
    }

    三:在执行过程中,由于函数声明以及本身在编译时被提升到当前作用域的顶端,运行过程中遇到同名表达式,则函数表达式会覆盖函数声明。

     var test = function () {
        console.log('函数表达式=', 111);
      }
      function test() {
        console.log('函数声明=', 222)
      }
    
      test();    // 函数表达式=111

    参考:https://zhuanlan.zhihu.com/p/139644982

  • 相关阅读:
    [音乐欣赏]为你读诗背景音乐,音乐电台
    [读书笔记]1368个单词就够了
    [读书笔记]项目管理实战:Microsoft Project精髓与方法
    [音乐欣赏]动力火车 艾琳娜
    [办公自动化]PDF大小不一如何调整
    [读书笔记]左手数据,右手图表
    [写作新思路]数据分析
    揪出Android流氓软件
    [办公自动化]Wlan无法启动,无法连接无线网wifi,所有无线网都搜索不到
    日常UVA题目英语积累
  • 原文地址:https://www.cnblogs.com/liumcb/p/14046493.html
Copyright © 2011-2022 走看看