js_函数参数的相关问题

arguments

argument对象是什么

arguments是用来保存函数实参的对象,它在函数创建时会自动创建,在函数调用时会初始化。它保存有实参的值,callee属性(函数的指针),length属性(传入实参的数量)

在传入实参情况下arguments对象与形参的对应关系

        function a(val) {
            console.log(val); //3
            console.log(arguments[0]); //3
            arguments[0] = 7;
            console.log(val); //7
            val = 10;
            console.log(arguments[0]);//10
        }
        a(3);

在不传入参数情况下arguments对象与形参的对应关系

        function a(val) {
            console.log(val); //undefined
            console.log(arguments.length); //0
            arguments[0] = 7;
            console.log(val); //undefined
            console.log(arguments.length); //0
            val = 10;
            console.log(arguments[0]); //7
        }
        a();

在传入实参数与形参数不对等情况下形参与arguments对象的对应关系

        function a(val1, val2) {
            console.log(val1, val2); //3,undefined
            console.log(arguments[0], arguments[1], arguments.length); //3,undefined,1
            val1 = 10;
            val2 = 20;
            console.log(val1, val2); //10,20
            console.log(arguments[0], arguments[1], arguments.length); //10,undefined,1
            arguments[1] = 30;
            console.log(val2);//20
        }
        a(3);

在预定义形参的情况下,形参与arguments的对应关系

        function a(val1, val2 = 5) {
            console.log(val1, val2); //7,5
            console.log(arguments[0], arguments[1], arguments.length); //7,undefined,1
            val1 = 10;
            val2 = 20;
            console.log(val1, val2); //10,20
            console.log(arguments[0], arguments[1], arguments.length); //7,undefined,1
        }
        a(7);

总结

  • arguments对象只有在传入参数时会与对应的形参进行绑定,此时修改形参会同时修改对应的arguments对象属性,修改arguments对象属性也会修改对应的形参值。
  • 如果传入实参数与声明的形参数不对等。传入的实参会被写入arguments对象中,也会赋值给形参,在整个函数的运行中都只有它们会双向绑定,在此之后对剩余形参的赋值不会再和arguments对象进行绑定。也就是说,传入多少个实参,arguments就双向绑定多少个形参。
  • 对任何形参进行预定义的情况下,arguments与形参不会进行双向绑定。修改形参的值或修该arguments的值不会影响到另一方。
posted @ 2020-07-03 18:06  Syinho  阅读(139)  评论(0编辑  收藏  举报