JavaScript 函數用途

在JavaScript中,函數能夠:被賦值給一個變量,被賦值爲對象的屬性、做爲參數被傳入別的函數、做爲函數的結果被返回、用字面量來建立。javascript

1. 賦值給一個變量

//聲明一個函數,接受兩個參數
function add(x,y){
    return x+y;
}

var a=0;
a=add;//將函數賦值給一個變量
var b=a(2,3);
alert(b);//5

結果:java

分析:賦值以後,變量a引用函數add,即a的值是一個函數對象(一個可執行代碼塊),因此可使用a(2,3)這樣的語句進行求和操做。一般的編程語言中,咱們會將函數/方法的返回值(基本數據類型或者對象)賦值給其餘的變量,可是沒法作到將函數/方法自己賦值給其餘變量。究其緣由,是由於在這些編程語言中,沒有一種數據類型表示函數。編程

2. 賦值爲對象的屬性

var obj={
    id:"obj1";
}
obj.func=add;//賦值爲對象的屬性
obj.func(2,3);//返回5

實際上,這個和第一個例子本質同樣。第一個例子中的a變量,是全局對象window的一個屬性,而在第二個例子中則爲obj對象。異步

3. 做爲參數傳遞

function adPrint2(str,handler){
   alert(handler(str));
    }
//將字符串轉換爲大寫形式,並返回
function up(str){
return str.toUpperCase();
    }

//將字符串轉換爲小寫形式,並返回
function low(str){
return str.toLowerCase();
    }
adPrint2("hello,world",up);
adPrint2("hello,world",low);

能夠看到:函數adPrint2的第二個參數,其實是一個函數(接受一個字符串爲參數,並返回參數字符串的大寫/小寫形式),將這個處理函數做爲函數參數傳入,在adPrint2的內部,仍然能夠調用這個函數。在客戶端的JavaScript中,在異步事件的回調函數中更是必須的一種模式(好比:鼠標點擊事件,Ajax請求的回調等)編程語言

4. 做爲函數的返回值

function currying(){
    return function(){
   alert("curring");
    }
}

1.調用currying()會獲得:function(){
alert("curring");
}
2.若是調用currying返回的是這個匿名函數,須要這樣:currying()();第一個括號表示操做,表示調用currying自己,返回值是函數;第二個括號操做符調用這個返回值,因此會獲得這樣的結果:curring;函數

5. 函數用字面量來建立

參考《JavaScript學習指南》P100
咱們可使用String構造器建立關鍵字符串,而後使用String方法訪問它。學習

var str=new String("Learning Java");
document.writeIn(str.replace(/Java/,"javascript"));

也能夠基於基本字符串類型使用變量,而且仍然能夠訪問String對象的方法。當調用String對象的方法時,JavaScript引擎會隱式地將字面量包裝在一個對象中。code

var str2="Learning Java";
document.writeIn(str2.replace(/Java/,"javascript"));

實際上能夠這樣寫:document.writeIn("Learning Java".replace(/Java/,"javascript"));
所謂的函數字面量,就是說當想建立一個函數時候,不使用function構造函數,一樣能夠將其賦給一個變量,這樣它在字面量上就成了函數字面量。對象

var func=function (params){
    statements;
    }

函數字面量也稱爲函數表達式,由於這樣建立的函數將稱爲表達式的一部分,而不是一個特有類型的語句。它們像匿名函數同樣沒有定義函數名稱,不過和匿名函數直接是有差別的。函數字面量只會解析一次,實際上,除了把函數賦給一個變量以外,函數字面量和聲明式函數式相似的:blog

var func=function(x,y){
    return x*y;
    }

alert(2,3);
相關文章
相關標籤/搜索