zoukankan      html  css  js  c++  java
  • 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的值不会影响到另一方。
  • 相关阅读:
    1月6日 作业 穷举
    1.4 作业
    12月31日 作业
    12月29日-练习成果
    12月30日作业-<转>字符集编码
    1.22作业
    集合
    泛型
    CPU接口练习 (仅以此程序证明 某个同学真的有毒!有毒!!!)
    继承知识点总结
  • 原文地址:https://www.cnblogs.com/Syinho/p/13231577.html
Copyright © 2011-2022 走看看