Javascript中有3種建立函數的方法:聲明式的/靜態的 、動態的/匿名的 、字面量式的。數組
函數的命名規範
一般以動詞開頭,而後跟上一個或多個名詞,每一個名詞的首字符都是大寫字母。ide
聲明式的函數
function functionname (param1, param2, ....... , paramn){
Function statements;
}
函數返回值和參數
參數中的變量傳給函數的其實是原始值,如一個字符串、一個布爾值、一個數字等。在函數中修改參數值,不會影響實際值。
對於傳給函數的對象而言傳遞的則是一個引用。在函數中修改這個對象將會反映在調用程序中。
例1:
function alterArgs(strLiteral,aryObject){
strLiteral = "override";
aryObject[1] = "2";
aryObject[aryObject.length] = "three";
}
function testParams(){
var str = "Original Literal";
var ary = new Array("one","two");
document.writeln("string literal is "+ str + "<br />");
document.writeln("Array object is "+ ary +"<br /><br />");
alterArgs(str,ary);
document.writeln("string literal is "+ str + "<br />");
document.writeln("Array object is "+ ary +"<br /><br />");
}
瀏覽器輸出爲:
string literal is Original Literal
Array object is one,two
string literal is Original Literal
Array object is one,2,three
匿名函數
函數就是一個對象。所以,能夠像建立字符串、數組那樣經過一個構造器建立它們,並將該函數賦給一個變量。匿名函數自己並非直接聲明的,也沒有對其進行命名。
當Javascript解析它時,和聲明式函數不同,它將動態建立一個匿名函數;當其被調用後,該函數就將被自動刪除。若是該函數在一個循環中使用,那麼每次循環將建立一次函數,而聲明式只會被建立一次。動態函數對於定義一個在運行時才能肯定需求的函數而言是一個很好的方法。
例1:
var sayHi = new Function("toWhom","alert('Hi' + toWhom);");
sayHi("World!");
使用函數構造器建立一個匿名函數的語法格式:
var variable = new Function(「param1」,」param2」,........,」paramn」,」functionbody」);
例2:
function buildFunction(){
var func = prompt("Enter function body:");
var x = prompt("Enter value of x:");
var y = prompt("Enter value of y:");
var op = new Function("x","y",func);
var theAnswer = op(x,y);
alert("Function is: "+func);
alert("x is: "+ x + " y is: "+ y);
alert("The answer is: "+ theAnswer);
}
這個例子將匿名函數的動態性發揮到了極致。
瀏覽器顯示:
函數字面量
也稱爲函數表達式,由於這樣建立的函數將稱爲表達式的一部分,而不是一個特有類型的語句。
就是建立一個函數能夠不使用函數構造器,一樣也能夠將其賦給一個變量;這樣的字面量就構成了函數的字面量。
語法格式:
var func = function (params) {
statements;
}
它也沒有函數名,和匿名函數的區別是,函數字面量只會被解析一次。
當想實現如把一個函數做爲另外一個函數的參數之類的擴展時,函數字面量的特點就會顯示出來,看下面的例子。
例3:
function funcObject(x,y,z){
alert(z(x,y));
}
function testFunction(){
funcObject(3,4,function(x,y) {return x * y});//第三個參數是一個函數
}
執行結果是彈出一個顯示「12」的alert對話框。