JS函數本質更像一個對象,有屬性和方法。函數
將函數定義做爲對象的屬性,則稱之爲對象方法;函數若是用於建立新的對象,則稱之爲對象的構造函數。spa
函數能夠經過聲明定義,也能夠是一個表達式。code
function functionName( parameters){ //函數體,執行的代碼
//函數體內的可執行語句以分號間隔
}
函數的聲明語句不是可執行語句,因此不須要以分號結束。對象
函數只有在調用的時候纔會執行。blog
函數表達式能夠存儲在變量中,該變量能夠做爲一個函數使用。這種狀況的函數被稱爲 匿名函數 沒有函數名稱。遞歸
var x = function ( a,b ){ return a + b}; var z = x ( 4,3 );
var myFunction = new Function("a" , "b", "return a*b"); //構造函數中myFunction是對象形式 var x = myFunction(4,3);
在JS中不少時候須要儘可能避免使用關鍵字 new ,上面的實例能夠不適用構造函數,直接寫成如下形式作用域
var myFunction = function(a,b){ return a*b }; var x = myFunction(4,3);
提高是JS默認將當前做用域提高到前面去的行爲,應用在變量的聲明和函數的聲明。所以函數能夠在聲明以前調用。(使用表達式定義函數時沒法進行提高,做用域被表達式中的變量限定了)io
myFunction(5); function myFunction(y){ return y * y; }
自調用函數:function
函數表達式後跟 () ,則函數會自動調用。可是函數內的參數不能自調用聲明的函數,必定要把這個和遞歸區分開。class
(function (){ var x = "hello"; //我將調用本身 })(); //經過添加括號來講明這是一個函數表達式 (函數聲明)()
有返回值的函數一般均可以看成一個值用於賦值或運算表達式中。