js函數的各種寫法與調用


以下是我見過的各種js函數的各種寫法以及調用,雖然有些寫法及其調用我不清楚其專業術語叫啥,但並不影響我寫一個總結筆記。

 

我們剛開始接觸js語音,經常看到的這種名叫“使用function關鍵字來定義函數”的寫法,如:

function f(e){
alert(e);
}
f("hello world");

把函數賦值給一個變量,這種大概叫“表達式方式定義函數”吧,如:

var f=function(e){
alert(e);
}
f("hello world");

如上,如果省略了函數名,這種也叫“匿名函數”,當然也可以不匿名,給一個函數名,這在用於遞歸函數時就用到了,如:

var fact=function factTemp(n){
if(n<=1) return 1;
else return n*factTemp(n-1);
}
fact(3); // return 6

還有一種叫“使用構造函數”來定義函數,如:

var f=new Function("x","y","alert(x*y);");
f(2,3); //==>6

以上是三種定義函數的寫法及其調用,但是調用還有其他方式:

用call()函數間接調用,如:

function person(name){
    this.name=name;
    this.sayHi=function(age,blogs){
        alert("My name is: "+this.name+";\n age:"+age+";\n blogs:"+blogs);    
    }
}
function me(name){
    this.name=name;    
}
var person1=new person("function person");
var me1=new me("function me");
person1.sayHi.call(me1,24,"http://www.cnblogs.com/xiaomou2014");  //本來me1是沒有sayHi函數的,經過用call就調用了personal里的sayHi函數了。

同樣類似於call的同類函數apply也同樣能實現這樣子的功能,只不過他的第二個參數是數組而已,如:

function person(name){
    this.name=name;
    this.sayHi=function(age,blogs){
        alert("My name is: "+this.name+";\n age:"+age+";\n blogs:"+blogs);    
    }
}
function me(name){
    this.name=name;    
}
var person1=new person("function person");
var me1=new me("function me");
person1.sayHi.apply(me1,[24,"http://www.cnblogs.com/xiaomou2014"]);  

 

函數可以賦值給變量,同時也可以把他直接賦值給對象的屬性,如:

var o={ square:function(x){ return x*x; } };

var y=o.square(2);  //y=4;

 

有時候我們定於了一個函數后需要他馬上運行,這貌似也挺多見於js插件,如:

(function(){
alert("hello world");
})();

也可以給他一個函數名:

(function f(){
alert("hello world");
})();

第二種:

(function(){
alert("hello world");
}());

同樣的我們也可以給他一個函數名:

(function f(){
alert("hello world");
}());

當然也可以給它一個參數:

(function(e){
alert(e);
}("hello world"));

看別人的插件,你會發現人家開頭處加了一個";",這樣就算頁面js有錯誤,加載運行他的插件也能保證運行,如:

;(function(e){
alert(e);
}("hello world"));

 

如果一個函數的參數很多,那么我們調用函數的時候並不能很好的記住他的順序,把參數封裝成對象,然后把對象里的一個個屬性對應用於參數,這樣子很好解決了這個問題,如:

 1 var f=function(args){
 2     sayHi(args.country || "Chinese",
 3             args.name,
 4             args.qq,
 5             args.phone,
 6             args.email)                
 7 }
 8 function sayHi(country,name,qq,phone,email){
 9     alert("Hi, I am a "+country+", my name is "+name+";qq:"+qq+";phone:"+phone+";email:"+email);    
10 }
11 f({name:"xiao",phone:"13888888888",email:"123456@qq.com",qq:123456});

 

這樣子只要把參數名記住了就可以了,不用管他的順序,同時給需要賦默認值得參數也很方便,如 args.country || "Chinese",如果調用函數的時候沒有給country 這一參數實參,那么他的默認值就是chinese了。

 


免責聲明!

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



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