JavaScript arguments對象

函數的參數
-> length 屬性
在 js 中凡是定義了一個函數, 就是定義了一個對象.
函數與通常的數據是同樣的使用: 賦值, 能夠調用.css

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

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

在實際調用的時候 arguments 就是實際調用時傳入的全部參數dom

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

使用 arguments 能夠保證在函數定義不寫參數的狀況下, 也能夠得到函數調用時傳入的全部參數.
所以在不肯定函數有多少參數和須要函數有動態參數的時候使用.
1> 好比, 求兩個數組中較大的數字
function max( a, b ) {
return a > b ? a : b;
}
若是須要判斷多個數字中較大的數字,代碼以下:spa

    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 元素, 第二個參數
是字符串, 用於告知須要處理哪個樣式, 第三個參數就是對應的樣式值.code

css( div, 'border' ) -> 得到 div 元素的 border 樣式屬性的值
css( div, 'border', '1px solid red' ) 爲元素 div 設置 border 的樣式.htm

代碼以下:對象

<!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>
相關文章
相關標籤/搜索