對於javascript的function的總結

來源:互聯網
上載者:User

學習知識難免會忘記,關鍵是在忘記之後,下次遇到時能夠通過快捷的方法來回憶,並盡量達到忘記之前的狀態。總結也許是日後回憶的一種有效方法,前些日子看了javascript的function,總結如下:

學習function重要的就是明白當程式運行到函式宣告的時候,並不執行該函數,當其他函數調用所聲明的函數時,該函數才被執行,也就是英文說的function is complied,but not executed until you call it.

再有就是函數在聲明時建立變數。例如function(){}就建立了一個變數,雖然這個變數是匿名的。

js 代碼
  1. var a=function(){};   
  2.   
  3. var a=function(x,y){}(1,2);   

第一條語句是定義一個匿名function,並將該函數賦給a變數。第二條語句是定義一個匿名function,並調用將該函數的返回結果賦值給a變數。

function add(a,b){};則是定義了一個function,該function的名字是add,相當於一個名為add的變數指向該function。

看看以下代碼,感覺挺有意思:

js 代碼
  1. function myFunction(){alert("Old");};   
  2.   
  3. var savedFunction=myFunction;   
  4.   
  5. myFunction=function(){alert("New");};   
  6.   
  7. myFunction();   //prints"New"   
  8.   
  9. savedFunction(); //prints"Old"   

在調用myFuction函數的時候,列印出New字串,代碼的第二行明確指出savedFunction=myFunction,但是在調用savedFunction的時候會出現Old字串,這種情況應該引起java同行的注意,在javascript中,指標指向的是程式碼片段,執行第二行的時候,savedFucntion指向的是myFuction所指向的程式碼片段 myFunction code(第一行),然而在第三行myFunction指標由先前的程式碼片段myFunction code改變為程式碼片段function(){alert("New")} code的時候,先前的程式碼片段仍然未消失,被savedFunction所指向,這也就解釋了為什麼最後程式列印出的字串仍是Old。

對於Function關鍵字來說僅在特殊情況下用到,一般就用function,這裡就不再介紹了。

prototype屬性對於初學js的人來說比較迷惑,這裡大致的總結如下:

一般的變數沒有prototype屬性,constructor function有prototype屬性,也就是聲明的function(){}變數,js中的每個對象都有一個_proto_和constructor屬性,如果一個對象由constructor function產生,例如:

js 代碼
  1. function Ball(message){   
  2.   
  3. alert(message);   
  4.   
  5. };   
  6.   
  7. var ball0=new Ball("executing");   

解釋以下,最後一行代碼等同於:

js 代碼
  1. var ball0=new Object();   
  2.   
  3. ball0.construct=Ball;//將屬性construct指向程式碼片段Ball code   
  4.   
  5. ball0.construct("executing"); //執行該程式碼片段   

接著說,如果一個對象由constructor function產生,則該對象ball0的_proto_屬性指向它的建構函式的prototype屬性,也就是指向constructor function(這裡是前三行代碼)所具有的prototype屬性,因此凡是用該constructor function產生的對象,都帶有該function的prototype屬性。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.