关于函数的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 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>
时间: 2024-10-12 09:01:40

关于函数的arguments的相关文章

变量声明置顶规则、函数声明及函数表达式和函数的arguments属性初始化

一.变量声明和变量赋值: if (!("a" in window)) { var a = 1; } alert(a);//a为? 你可能认为alert出来的结果是1,然后实际结果是"undefined".要了解为什么,我们需要知道JavaScript里的3个概念: 1.所有的全局变量都是window的属性,语句 var a = 1;等价于window.a = 1; 可以用如下方式来检测全局变量是否声明: "变量名称" in window 2.声明

JavaScript函数的arguments对象、重载问题

一.arguments对象概述: 1.ECMAScript 函数不介意传递进来多少参数,也不会因为参数不统一而错误. 2.函数体内可以通过 arguments 对象来接收传递进来的参数,并且保存函数参数 function box() { return arguments[0]+' | '+arguments[1]+' | '+arguments[5]; //得到每次参数的值,最后结果是1 | 2 | 6 } alert(box(1,2,3,4,5,6)); //传递参数 二.arguments

JavaScript 没有函数重载&amp;Arguments对象

对于学过Java的人来说,函数重载并不是一个陌生的概念,但是javaScript中有函数重载么...接下来我们就进行测试 <script type="text/javascript"> //JavaScript不存在函数重载现象 var add=function(a,b){ return a+b; } var add=function(a,b,c){ return a+b+c; } <span style="white-space:pre">

js 函数参数 arguments[0]

function box() {            return arguments[0] + '|' + arguments[1];                    }        alert(box(1, 2, 3, 4, 5, 6)); 输出:1|2 说明:1 ECMAScript 函数不介意传递进来多少参数,也不会因为参数不统一而错误.实际上,函数体内可以通过 arguments 对象来接收传递进来的参数.    2 arguments 对象的 length 属性可以得到参数

JavaScript函数式编程(0):函数基础 arguments、this、apply()、call()

1 函数参数 函数的实参和形参个数可以不等,之所以会这样,原因是 ECMAScript 中的参数在内部是用一个数组来表示的.函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话).如果实参个数大于形参个数,多余的实参不传递值,但是在arguments中可以访问:如果形参个数大于实参,没有传递值的实参将自动被赋予 undefined 值. 2 arguments和this 所有的函数调用都会传递两个隐式参数:arguments和this.实际上,在函数体内可以通过 argume

javascript函数之arguments

function foo(x,y,z){ console.info (arguments.length); //2 实际的参数个数 console.info(arguments[0]); //传入的第一个参数 arguments[0] = 10; console.info(x); //10 因为传入了第一个参数,所以存在绑定关系 arguments[2] = 100; console.info(z); //undefined 没有传入第三个参数,不存在绑定关系 console.info(argu

函数的Arguments与parameters

当谈论一个函数时,我们经常用argument 和 parameter相互代替,感觉好像它们差不多是相同的.  但是现在来澄清一下: 1.一个parameter 是一个变量,它是我们在定义一个函数时放到参数列表里的变量,它是函数定义的一部分, 2.一个argument 则是我们在调用函数时传递给它的一个值. 如下所示: function skulk(ninja) { return performAction(ninja,'skulking'); } var performAction=functi

JS匿名函数以及arguments.callee的调用

var res = (function (n) {    if( n>1 ) {        return n + arguments.callee( n-1 );    } else {        return 1;    }})(100)console.log(res);

将函数的实际参数转换成数组的方法,习惯用Array.prototype.slice.call(arguments)

实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组. 我们可以通过数组的 slice 方法将 arguments 对象转换成真正的数组. 方法一:通过Array.prototype属性调用slice方法 var args = Array.prototype.slice.call(arguments); Array 本身是没有 slice 方法,它的方法在 Arr