2012年9月23日星期日

【函数】♣arguments

【函数】♣arguments

<!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>

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


TAG: