標籤:java strong 使用 javascript cti 類
1.javascript定義函數的三種方法
一、function語句//這個方法比較常用
function fn(){
alert("這是使用function語句進行函數定義");
}
fn();
二、Function()建構函式
var F = new Function("a","b","alert(a+b)");
F(a,b);
其實相當於如下代碼:
function F(a,b){
alert(a+b);
}
三、函數直接量//這個方法比較常用
var zhenn = function(){
alert("zhenn");
}
zhenn();
雖然函數直接量建立的是未命名函數,但是它的文法也規定它可以指定函數名,這在編寫調用自身的遞迴函式時非常有用,例如:
var f = function fact(x) {
if (x <= 1) {
return 1;
} else {
return x * fact(x - 1);
}
};
註:它並沒有真正建立一個名為fact()函數,只是允許函數體用這個名字來引用自身。JavaScript1.5之前的版本中沒有正確實現這種命名的函數直接量。
2.其他說明
一、建構函式
其實從字面上理解,建構函式似乎也是函數,其實它並不是函數,而只是一種函數模型。
要執行個體化才能運行,就跟我們寫的類一樣,要new一下才能用。
function Fn(){ //定義建構函式
this.elem ="字串";
this.fn = function(){
alert("函數");
}
}
var f = new Fn(); //執行個體化
alert(f.elem);
f.fn();
二.Function()建構函式和函數直接量差別 Function()建構函式和函數直接量之間的差別有一點就是:使用建構函式Function()建立的函數不使用詞法範圍,相反的,它們總是被頂級函數來編譯,如: var y = "global";
function constructFunction() {
var y = "local";
//Function()建構函式
return new Function("return y;");//不使用局部範圍
}
function constFunction() {
var y = "local";
//函數直接量
var f = function () {
return y;//使用局部範圍
};
return f;
}
alert(constructFunction()()); //顯示 global,因為Function()建構函式返回的函數並不使用局部範圍
alert(constFunction()());//顯示 lobal,因為函數直接量返回的函數並使用局部範圍
三.函數直接量詳細說明
在一些架構代碼中偶爾會看到這樣的寫法:(如jquery)
代碼一:
var tempObject = function doFunction() {
...
}();
代碼二:
(function doFunction() {
...
})();
如果我把這個單獨拿出來,你可能也一眼就看出來這段代碼的巧妙之處了--它在建構函式直接量的同時直接運行了此函數,而第二種代碼相對第一種而言更簡潔了(PS:第二種代碼用一對小括弧避免了編譯錯誤)。