()
可以啟用並執行函數。在小括號中可以包含零個或多個引數,引數之間通過逗號進行分隔。
function f(x,y) { //定義函數 return x * y; //返回值 } console.log(f(f(5,6), f(7,8))); //返回1680。重複呼叫函數
function f(x,y) { //定義函數 return function () { //返回函數型別的資料 return x * y; } } console.log(f(7,8) ()); //返回56,反復呼叫函數
function f() { //定義函數 return f; //返回函數自身 } console.log(f() () () () () () () () () () () ()); //返回函數自身當然,上述設計方法在實際開發中沒有任何應用價值,不建議使用。
var obj = { value : 0, increment : function (inc) { this.value += typeof inc === 'number' ? inc :1; } } obj.increment(); console.log(obj.value); //1 obj.increment(2); console.log(obj.value); //2使用點語法可以呼叫物件 obj 的方法 increment,然後通過 increment 方法改寫 value 屬性的值。在 increment 方法中可以使用 this 存取 obj 物件,然後使用 obj.value 方式讀寫 value 屬性值。
function.call(thisobj, args...)
function.apply(thisobj, [args])
function f(x,y) { //定義求和函數 return x + y; } console.log(f.call (null, 3, 4)); //返回7在上面範例中,f 是一個簡單的求和函數,通過 call 方法把函數 f 係結到空物件 null 身上,以實現動態呼叫函數 f,同時把引數 3 和 4 傳遞給函數 f,返回值為 7。實際上,f.call(null,3,4) 等價於 null.m(3,4)。
function f(x,y) { //定義求和函數 return x + y; } console.log(f.apply(null, [3,4])); //返回7如果把一個陣列或偽類陣列的所有元素作為引數進行傳遞,使用 apply 方法就非常便利。
function max() { //求最大值函數 var m = Number.NEGATIVE_INFINITY; //宣告一個負無窮大的數值 for (var i = 0; i < arguments.length; i ++) { //遍歷所有實參 if (arguments[i] > m) //如果實參值大於變數m m = arguments[i]; //則把該實參值賦值給m } return m; //返回最大值 } var a = [23,45,2,46,62,45,56,63]; //宣告並初始化陣列 var m = max.apply(Object, a); //動態呼叫max,係結為Object的方法 console.log(m); //返回63在上面範例中,設計定義一個函數 max(),用來計算所有引數中的最大值引數。首先通過 apply 方法動態呼叫 max() 函數,然後把它繫結為 Object 物件的一個方法,並把包含多個值的陣列傳遞給它,最後返回經過 max() 計算後的最大陣列元素。
var a = [23,45,2,46,62,45,56,63]; //定義並初始化陣列 var m = Math.max.apply(Object, a); //呼叫系統函數max console.log(m); //返回63
function f() { return "函數f"; } var obj = {}; f.call(obj); //把函數f系結為obj物件的方法 console.log(obj.f()); //再次呼叫該方法,則返回編譯錯誤
function (x,y) { //定義函數 console.log("x =" + x + ", y =" + y); } new f(3,4);使用 new 命令呼叫函數時,返回的是物件,而不是 return 的返回值。如果不需要返回值,或者 return 的返回值是物件,則可以選用 new 間接呼叫函數。