美文网首页
理解函数参数及arguments

理解函数参数及arguments

作者: 学的会的前端 | 来源:发表于2019-01-17 17:51 被阅读0次

    函数参数的确定

    ECMAScript中函数的参数在内部使用一个数组来表示的。函数接收到的始终是这个数组,而不关心数组中有多少个参数或者参数的类型是什么。

    function fn(name,age,sex){
        console.log(name);
        console.log(age);
        console.log(sex);
    }
    fn('xiao',23,'nv'); // xiao 23 nv
    console.log('---------------')
    fn(23,'nv'); // 23 nv
    console.log('---------------')
    fn('nv','xiaoqi',23,45);
    

    需要注意的是:形参和实参是一一对应的。

    TIM图片20190117171511.png

    arguments的作用:arguments是类数组

    1. 在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
    2. arguments具有使用[]语法访问每一个元素的方法,可以使用arguments[0]来获取第一个参数值,以此类推。
    function fn(){
        console.log('hello' + arguments[0] + ',' + arguments[1]);
    }
    fn('nihao',23)
    

    以上代码等同于

    function fn(name,age){
        console.log('hello' + name + ',' + age);
    }
    fn('nihao',23)
    

    从以上实例可以得出:JS函数中命名的参数只是提供便利,但不是必需的。

    1. 可以通过访问arguments对象的length属性确定多少个参数传递给了函数。
    function fn(){
        console.log(arguments.length);
    }
    fn('xiaoqi',23,'nv'); // arguments.length = 3
    fn(23); // arguments.length = 1
    fn(); //arguments.length = 0
    
    • 利用arguments.length,可以实现接受任意个参数分别实现不同的功能。
      arguments对象的长度是由传入的参数个数决定的,不是由定义函数时命名的参数个数决定。
    function fn(){
        if(arguments.length == 1){
            console.log('2个参数');
        }else if(arguments.length == 3){
            console.log('这是三个参数')
        }else{
            console.log('000');
        }
    }
    fn('xiaoqi',23,'nv');  // 这是三个参数
    fn(23);  // 2个参数
    fn();  //000
    
    1. arguments对象可以和命名参数一起使用
    function fn(num1,num2){
        console.log(arguments[0] + num2); // 30
    }
    fn(10,20); 
    
    1. arguments的值永远与对应命名参数的值保持同步。
    function fn(num1,num2){
        arguments[1] = 10;
        console.log(arguments[0] + num2); // 20
    }
    fn(10,20); 
    

    以上代码解析:每次执行fn()这个函数,num2的值都会被修改为10 ,因为arguments对象中的值会自动反映到num2,但是,num2和arguments[1]的内存空间是不同的。如果fn()只传入了一个参数,那么修改arguments[1]是没有任何效果的,因为arguments的长度已经被确定为1了,没有第二个参数。

    1. 没有传递值的参数将自动赋值为undefined。
    function fn(num1,num2){
        console.log(arguments[0]); // undefined
    }
    fn(); 
    

    严格模式标准:

    • 如果像上列,在函数内设置arguments[1] = 10,那么num2的值为undefined。

    ECMAScript中所有参数传递的都是值,不可能通过引用传递参数。

    相关文章

      网友评论

          本文标题:理解函数参数及arguments

          本文链接:https://www.haomeiwen.com/subject/ifnidqtx.html