js函數定義及一些說明


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:第二種代碼用一對小括號避免了編譯錯誤)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM