1. 程式人生 > >關於函數的arguments

關於函數的arguments

body 簡單 style oct arguments 元素 ttr 樣式 i++

函數的參數
-> length 屬性
在 js 中凡是定義了一個函數, 就是定義了一個對象.
函數與一般的數據是一樣的使用: 賦值, 可以調用.

函數作為對象有一個屬性 length 該屬性用於描述在定義的時候函數的 參數個數

-> arguments 對象
所謂 arguments, 就是參數的復數形式. 也就是在調用函數的時候, 會給函數傳入參數
但是有時不確定需要傳入多少參數, 所有在調用時傳入的參數都會被 arguments 獲取到.
簡單的說 arguments 中存儲的就是參數的集合.

在實際調用的時候 arguments 就是實際調用時傳入的所有參數

問題: 如何判斷函數參數調用符合函數的定義?
如何判斷調用時的參數個數與函數定義時的參數個數一樣?
函數名.length === arguments.length

使用 arguments 可以保證在函數定義不寫參數的情況下, 也可以獲得函數調用時傳入的所有參數.
因此在不確定函數有多少參數和需要函數有動態參數的時候使用.
1> 比如, 求兩個數組中較大的數字
function max( a, b ) {
return a > b ? a : b;
}
如果需要判斷多個數字中較大的數字,代碼如下:

    function max(){
        var args = arguments;
        var maxNum = args[0];
        for(var i=1;i<args.length;i++){
            if(maxNum<args[i]){
                maxNum = args[i];
            }
        }
        return maxNum;
    }
    console.log(max(2,3,4,5,6,9))


2> 希望函數有動態參數, 在傳入不同參數的時候有不同的結果


在 jq 中, css, attr, val, html, text, ...
接下來實現一個 css 方法, 該方法提供兩個參數, 一個是 dom 元素, 第二個是一個字符串
用於解釋獲得什麽樣式屬性值; 也可以帶有三個參數, 第一個參數是 dom 元素, 第二個參數
是字符串, 用於告知需要處理哪一個樣式, 第三個參數就是對應的樣式值.

css( div, ‘border‘ ) -> 獲得 div 元素的 border 樣式屬性的值
css( div, ‘border‘, ‘1px solid red‘ ) 為元素 div 設置 border 的樣式.

代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="dv"></div>
</body>
<script>
    function css () {
        var args = arguments;
        // 第 0 個元素是 DOM
        // 第 1 個元素是 對應的樣式
        // 第 2 個元素是 需要設置的樣式值
        if ( args.length == 3 ) {
            // 設置
            args[ 0 ].style[ args[ 1 ] ] = args[ 2 ]; 
        } else {
            // 獲取
            return args[ 0 ].style[ args[ 1 ] ];
        }
    }
    var div = document.getElementById( ‘dv‘ );
    css( div, ‘border‘, ‘1px solid red‘ );
    css( div, ‘width‘, ‘200px‘);
    css( div, ‘height‘, ‘100px‘);
    console.log( css( div, ‘width‘ ) );
</script>
</html>

關於函數的arguments