1. 程式人生 > >JS的三種函式宣告

JS的三種函式宣告

js有3種方法進行函式宣告。1、function語句型別函式宣告function test1(){}函式的呼叫方式:test1();2、函式的直接量形式var test2 = function(){}函式的呼叫方式:test2();3、建構函式式var test3 = new Function("a","b","return a+b;");函式的呼叫方式:test3(10,20);3種函式宣告方式比較: 首先從性質上來說明:第一種和第二種都屬於靜態,第三種屬於動態其次從解析順序上說明:第一種優先解析,第二種和第三種都屬於順序解析,為了更好的說明,做如下的測試。//探測三種函式宣告的解析順序  function f(){return 1;}  alert(f());  var f = new Function("return 2;");  alert(f());  var f = function(){return 3;}  alert(f());  function f(){return 4;} //標記1 alert(f());  //標記2 var f = new Function("return 5;");  alert(f());  var f = function(){return 6;}  alert(f());也許你會認為執行以上函式之後,輸出的結果為1,2,3,4,5,6,事實上,結果的執行順序為4,2,3,3,5,6,怎麼樣,很吃驚吧,讓我來給閣下解釋一下。function語句型別函式宣告優先解析,當頁面載入之後,js解析器會首先解析該函式,語句型f函式共兩個,首先return 1,而後再解析另一個語句型函式f,由於js中沒有過載,所以第二個f函式會覆蓋第一個return 4,因此,在alert的時候先輸出4,其他的函式都是順序執行,故順序輸出,2,3,當函式執行到標記1的時候,發現頁面載入時該函式已解析,故不再解析,所以執行標記2的時候,f函式依然是上一次解析的f函式,故輸出3,接著再順序執行,因此最後的輸出結果為:4,2,3,3,5,6.若還有不明白的地方,歡迎大家留言!