理解函数参数及arguments

2019-01-17  本文已影响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
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(); 

严格模式标准:

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

上一篇 下一篇

猜你喜欢

热点阅读