JavaScript arguments对象

函数的参数
-> 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 ></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>