☀【arguments】

《JavaScript权威指南》
深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解
http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <script>
        // 尽管定义 JavaScript 函数时有固定数目的命名参数,但当调用这个函数时,传递给它的参数数目却可以是任意的。Arguments 对象允许完全地存取那些实际参数值,即使某些或全部参数还没有被命名。假定定义了一个函数f,要传递给它一个实际参数x。如果用两个实际参数来调用这个函数,那么在函数体内,用形式参数名 x 或 arguments[0] 可以存取第一个实际参数。而第二个实际参数只能通过 arguments[1] 来存取
        // 验证调用函数时是否使用了正确数目的实际参数
        function f1(x, y, z) {
            if (arguments.length !== 3) {
                console.log('function f called with ' + arguments.length + ' arguments, but it expects 3 arguments.');
            }
        }
        f1(1, 2);
        // 接受任意数目的实际参数,然后返回其中最大的参数的值
        function max() {
            var m = Number.NEGATIVE_INFINITY;// NEGATIVE_INFINITY 属性表示小于 Number.MIN_VALUE 的值。该值代表负无穷大
            for (var i = 0, len = arguments.length; i < len; i++) {
                if (arguments[i] > m) {
                    m = arguments[i];
                }
            }
            return m;
        }
        console.log(max(1, 10, 100, 10000, 4, 5, 6));
        function f2(x) {
            console.log(x);
            arguments[0] = null;
            console.log(x);
        }
        f2(2);
        // Arguments 对象还定义了 callee 属性,用来引用当前正在执行的函数。这个属性没有太大用处,但它可以用来允许对未命名的函数递归地调用自身
        console.log(function (x) {
            if (x <= 1) {
                return 1;
            }
            return x * arguments.callee(x - 1);
        } (3));

        function f3(x, y) {
            arguments[1] = 10;
            console.log(y);
            console.log(arguments[1]);
        }
        f3(1, 2);// 10 10
        f3(1);// undefined 10
    </script>
</body>
</html>
原文地址:https://www.cnblogs.com/jzm17173/p/2698792.html