首頁  >  文章  >  web前端  >  javascript中Function類型詳解_javascript技巧

javascript中Function類型詳解_javascript技巧

WBOY
WBOY原創
2016-05-16 16:02:001329瀏覽

Function 類型

  function類型,毋庸置疑是js中相當重要的一個玩意。

  1.這玩意首先是一個對象,也就是說它是一個引用型。陳述:一聽到是對象,是不是很有一種它的基類是object對象錯覺感,No,

它和object是獨立的2個東西。當你typeof function 時,回傳的是 funciton 並非 object

  2.每個函數都是 Function 物件的一個實例,它與其他引用物件一樣具有屬性和方法。由於它是物件所以函數名稱是指向函數物件的指標

關於函數的宣告的語法支援:

<script>

  //方式1
  function fun(num1,num2){
    return num1+num2;
  }
  
  //方式2
  var fun=function(num1,num2){
    return num1+num2;
  };

  //方式3
  var fun=new Function("n1","n2","return n1+n2");
  
</script>

講解:3種方式都能完成一個函數的聲明,但各有不同。

方式1 理解為 一個函數的聲明,方式2,方式3理解為函數表達式。 (方式3不建議使用,原因會導致解析2次程式碼,先解釋常規ECMAScript程式碼,在解釋傳入的參數,這種

寫法,參數可以是N個,但是最後一個參數視為函數主體)

為什麼說不同,主要在於,js解析器對函數宣告 和 函數表達式 解析的不同。解析器會優先讀取函數申明,js引擎在執行時會將函數宣告自動放到執行環境的最頂端。

而函數表達式則不同,當執行到函數表達式時,才會真正去被解釋執行。關於這點理解很重要!

看程式碼

<script>
  console.log(typeof fun); //"function"
  console.log(typeof fun2); //"undefined"
  console.log(typeof fun3); //"undefined"
  function fun(n1,n2){
   return n1+n2;
  }
  var fun2=function(n1,n2){
   return n1+n2;
  }
  var fun3=new Function("n1","n2","return n1+n2;");
 </script>

  3.為什麼函數沒有重載?

  這個問題要從js的語言特性來考慮。在第2條已經說了,函數名稱只是指向函數物件的一個指標。根據指針的概念去理解就清楚了。

  看程式碼範例:

<script>
  function fun(n1){
   return n1+100;
  }
  function fun(n1){
   return n1+200;
  }
  console.log(fun(1));// 201 
  
  //以上写法在解析后应为
  
  var fun=function(n1){
    return n1+100;
  }
  fun=function(n1){
   return n1+200;
  }
  
  // fun 的引用被覆盖了
  console.log(fun(1));// 201 
 </script>

今天就寫到這,都是寫基本概念,希望對這塊有盲點的起到幫助!有什麼需要指正的地方,希望各位霸氣留言指正。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn