函數定義 函數是由這樣的方式進行宣告的:關鍵字 function、函數名稱、一組參數,以及置於括號中的待執行程式碼。
函數的建構語法有三種:
Js程式碼
程式碼如下:
程式碼如下:
例:
Js程式碼
複製程式碼
程式碼如下:
1.function f(x){return x* x};//function語句
2.var f = new Function("x","return x*x;");//Function()建構子
3.var f = function(x) {return x*x;};//函數直接量
如果函數沒有明確的回傳值,或呼叫了沒有參數的return 語句,那麼它真正傳回的值就是undefined。
var sayHi = new Function("sName", "sMessage", "alert('Hello ' sName sMessage);");
sayHi("jzj,", "你好!");//Hello jzj,你好!
函數名稱只是指向函數的變量,那麼可以把函數當作參數傳遞給另一個函數嗎?答案是可以的,請看:
Js代碼
複製代碼
代碼如下:
代碼如下:
如果你定義的函式沒有參數,那麼可以只要給建構函式傳遞一個字串(即函式的主體)。
注意:傳遞給建構函式Function()的參數中沒有一個用來說明它要建立的函式名稱。用Function()建構函數所建立的未命名函數有時被稱為「匿名函數」。
Function()函數允許我們動態地建立和編譯一個函數,它不會將我們限制在function語句預先編譯的函數體中。
函數直接量
函數直接量是一個表達式,它可以定義匿名函數。函數直接量的語法和function語句非常相似,只不過它被用作表達式,而不是用作語句,也無需指定函數名。語法:
Js程式碼
程式碼如下:
程式碼如下:
var function arg0, arg1, ... argN) { statements };//函數直接量
雖然函數直接量創建的是未命名函數,但是它的語法也規定它可以指定函數名,這在編寫呼叫自身的遞歸函數時非常有用,例如:
Js程式碼
複製程式碼
} else { return x * fact(x - 1 ); } }; 註:它並沒有真正建立一個名為fact()函數,只是允許函數體用這個名字來引用自己。 JavaScript1.5之前的版本中沒有正確實作這種命名的函數直接量。 •函數引用 函數名並沒有什麼實質意義,它不過是用來保存函數的變數名字,可以將這個函數賦給其他變量,它仍然會以相同方式起作用: Js程式碼複製程式碼 程式碼如下:
function square(x){return x*x;}
var a = square;
var b = a(5);//b は 25
これはCの関数ポインタに少し似ています。
Function() コンストラクターと関数リテラルの違い Function() コンストラクターと関数リテラルの違いは、コンストラクター Function() を使用して作成された関数が字句スコープを使用しないことです。それどころか、これらは常に次のようなトップレベル関数によってコンパイルされます。
Js コード
var y = "グローバル";
functionconstructFunction() {
var y = "local";
//Function() コンストラクター
return new Function( "return y;");//ローカルスコープを使用しない
}
function constFunction() {
var y = "local";
//関数リテラル
var f = function () {
return y;//ローカル スコープを使用します
}
return f;
}
//Function() コンストラクターはローカル スコープを使用しないため、グローバルを表示します。 scope
alert(constructFunction()());
//関数は関数を直接返し、ローカル スコープ
alert(constFunction()()) を使用するため、グローバルを表示します。 >