函數

參考教程,廖雪峰

函數定義

通過關鍵字function來定義一個函數

function abs(x) {
    if (x < 0)
        return -x;
     else
        return x;
}

js中函數也是一個對象,也可以按以下方式定義一個函數,將函數名作為一個指向該函數的變量。

var abs = function(x) {
     if (x < 0)
        return -x;
     else
        return x;
};
函數的參數 arguments

arguments是一個類似Array的數據集合,在函數內部,指向該調用該函數所傳遞的所有參數。
JavaScript允許傳入任意個參數,傳入的參數比定義的參數多也沒有問題。為保證所用參數正確,在使用前可以利用arguments來獲取所有傳遞過來的參數,對其進行參數驗證。

function abs(x) { 
    if (typeof x !== 'number') {
         throw 'Not a number'; 
    } 
    if (x >= 0) { 
        return x;
     } else { 
        return -x; 
     }
}

ES6標準引入了rest參數,可以方便地獲取函數定義以外的參數。

function foo(x,  y, ...rest) {
    console('x=' + x);
    console('y=' + y);
    console(rest);
}

foo(1 ,2 ,a ,royal ,100);
//x = 1
//y = 2
//Array [a , royal , 100]
foo(1);
//x = 1
//y = undefined
//Array []

rest參數只能寫在最后,前面用...標識,從運行結果可知,傳入的參數先綁定a、b,多余的參數以數組形式交給變量rest,所以,不再需要arguments我們就獲取了全部參數。
如果傳入的參數連正常定義的參數都沒填滿,也不要緊,rest參數會接收一個空數組(注意不是undefined)。

方法

將一個函數綁定到一個對象上,則稱此函數為這個對象的方法。

var xiaoming = { 
    name: '小明', 
    birth: 1990, 
    age: function () { 
        var y = new Date().getFullYear();
         return y - this.birth; 
    }
};
xiaoming.age(); // 今年調用是25,明年調用就變成26了

要保證this指向正確,必須用obj.xxx()的形式調用!ECMA決定,在strict模式下讓函數的this
指向undefined。在非strict模式下,直接調用某個對象的方法它重新指向全局對象window。

apply

要指定函數的this指向哪個對象,可以用函數本身的apply方法,它接收兩個參數,第一個參數就是需要綁定的this變量,第二個參數是Array,表示函數本身的參數。

function getAge() {
    var y = new Date().getFullYear(); 
    return y - this.birth;
}
var xiaoming = { 
    name: '小明', 
    birth: 1990, 
    age: getAge
};
xiaoming.age(); // 25
getAge.apply(xiaoming, []); // 25, this指向xiaoming, 參數為空

另一個與apply()類似的方法是call(),唯一區別是:

apply()把參數打包成Array再傳入;

call()把參數按順序傳入。

比如調用Math.max(3, 5, 4),分別用apply()和call()實現如下:

Math.max.apply(null, [3, 5, 4]); // 5
Math.max.call(null, 3, 5, 4); // 5
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 函數參數的默認值 基本用法 在ES6之前,不能直接為函數的參數指定默認值,只能采用變通的方法。 上面代碼檢查函數l...
    呼呼哥閱讀 3,476評論 0 1
  • 函數函數定義與調用變量作用域全局變量方法高階函數閉包箭頭函數$generator$ 函數 函數定義與調用 定義函數...
    染微言閱讀 629評論 0 5
  • 1.函數參數的默認值 (1).基本用法 在ES6之前,不能直接為函數的參數指定默認值,只能采用變通的方法。
    趙然228閱讀 707評論 0 0
  • 函數就是最基本的一種代碼抽象的方式。 定義函數function abs(x) {if (x >=0){return...
    _我和你一樣閱讀 459評論 0 0
  • 可以走出去,但選擇留下,留在圍城。 希望沖進去,但沒有動身,注視圍城。 卑劣的風撕扯著破旗哭哭笑笑, 絕望的夕陽,...
    少俠易風閱讀 354評論 0 0