函數類型
函數是對象,函數名實際上爲一個指向函數對象的指針,不會與某個函數綁定。
函數的定義
- 使用函數聲明語法定義
- 使用函數表達式定義【不推薦】
- 使用Function構造函數
注意:使用不帶圓括號的函數名是訪問函數指針,而並非是調用函數。
函數聲明和函數表達式的區別:
- 解析器會先讀取函數聲明,並使其在執行任何代碼前可用
- 函數表達式是當解析器執行到它所在的代碼行,纔會被解釋執行
函數的內部屬性
- arguments: 類數組對象,包好所有傳入函數中的參數
- this: 引用函數執行的環境對象
- length: 函數接收的命名參數的個數
- prototype: 保存所有的實例方法所在 【後一篇會詳細介紹】
prototype是不可枚舉的,所以使用for-in是無法發現的。
函數的方法:
- apply/call:非繼承而來的方法,在特定的作用域中調用函數,實際上等於設置函數體內this對象的值
- apply()方法接收兩個參數:1)在其中運行的函數作用域 2)Array的實例或者arguments對象
注意:在嚴格模式下,未指定環境對象而調用函數,則 this不會轉型爲window,而爲undefined. - call()接收參數:1)在其中運行的函數作用域 2)參數直接傳遞給函數
- bind(): 創建一個函數的實例,其this值會被綁定到傳給bind()函數的值。