Js函數的三種定義方式

  • 函數的定義方式函數

    • 函數聲明:必須有名字,會函數提高,在預解析階段就已經建立,聲明先後均可以調用code

      //函數聲明
      //定義函數名
      function fn(){
           console.log(123);
      }
    • 函數表達式:一種變量賦值,函表達式能夠沒有名字(匿名函數),沒有函數提高。對象

      //將函數賦值給一個變量,能夠是匿名函數
      var fn = function(){
          console.log(123);
      };

    因爲函數聲明提高,函數聲明定義的函數,其函數名能夠在函數聲明以前調用,而函數表達式定義的函數不能,它進行的是一個變量賦值,本質會進行變量聲明提高,若是寫在前面的話,只是定義了一個變量,而沒有賦值,其內部是undefined,沒法執行函數,就會報錯。blog

    • new Function圖片

      函數自己也是一種對象,能夠調用屬性和方法ip

      //函數聲明方式
      //有參數
      function fun(a,b){
          var a = 1;
          console.log(a+b);
      }
      function(2,3);
      
      //經過構造函數方法定義函數
      var fn = new Function('var a = "1";console.log(a)');
      fn();
      
      //添加參數
      var fn2 = new Function('a','b','var a = "1";console.log(a+b)');
      fn2(2,4);

      這種方式其實至關於new Function的括號裏穿的是一堆字符串,解析慢,效率低,易出錯。字符串

      console.dir(fn2);//new Function()是函數也是一種對象,有本身的屬性和方法

      new Function()是函數也是一種對象,有本身的屬性和方法io

      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tDlXMd1O-1615787758524)(C:\Users\xiaomi\AppData\Roaming\Typora\typora-user-images\image-20210315132052565.png)]

相關文章
相關標籤/搜索