arguments 是一个 对应于 传递给函数的参数 的 类数组(array-like)对象
- array-like意味着它不是一个数组类型,而是一个对象类型
- 但是它却拥有数组的一些特性,比如说length,比如可以通过index索引来访问
- 但是它却没有数组的一些方法,比如filter、map等;
-
// 函数中默认带有arguments变量 是一个类数组形式 // 1.可以接收用户传递过来的所有实参 function foo(a,b){ console.log(arguments); //2.通过索引值获取数组中的内容 console.log(arguments[0]); console.log(arguments[1]); console.log(arguments[2]); //3.使用for循环 for of遍历数组 for (var i of arguments){ console.log(i); } } foo(10,20,30)
arguments转Array
- 在开发中,我们经常需要将arguments转成Array,以便使用数组的一些特性
- 遍历arguments,添加到一个新数组中;
- Array.from
- […arguments]
-
// 函数中默认带有arguments变量 是一个类数组形式 function foo(a,b){ const newArr =[]; // for循环遍历追加 for(let i=0;i<arguments.length;i++){ newArr.push(arguments[i]) } console.log(newArr); // Arry.form(可迭代的伪数组) let xinshuzu = Array.from(arguments); console.log(xinshuzu); // [...arguments] 扩展运算符 let xinshuzu2 = [...arguments]; console.log(xinshuzu2); } foo(10,20,30,40)
箭头函数没有arguments
- 箭头函数是不绑定arguments的,所以我们在箭头函数中使用arguments会去上层作用域查找
-
// 箭头函数没有arguments let foo = ()=>{ console.log(arguments); } // f00()//报错 // 箭头函数没有arguments就会访问上一层作用域查找 function getfoo(){ let foo = ()=>{ console.log(arguments); } foo() } getfoo(10,20,30)
函数的剩余(rest)参
-
ES6中引用了rest parameter,可以将不定数量的参数放入到一个数组中:
-
如果最后一个参数是 ... 为前缀的,那么它会将剩余的参数放到该参数中,并且作为一个数组;
-
- 那么剩余参数和arguments有什么区别呢?
- arguments对象不是一个真正的数组,而rest参数是一个真正的数组,可以进行数组的所有操作;
- arguments是早期的ECMAScript中为了方便去获取所有的参数提供的一个数据结构,而rest参数是ES6中提供并且希望以此 来替代arguments的;
- 剩余参数必须放到最后一个位置,否则会报错。
-
//1. 剩余参数 就是形参 一般都是以 ... 开头的 //2. 剩余参数 是数组的形式 因为100给了a 200给了b // 剩余全部参数放到x中 //3. 剩余参数一定要放到函数的末尾 否则会报错 //4. 函数的形参可以一个不写 只写一个剩余形参 那么这个剩余形参会接收所有实参 //5. 现在这个剩余参数就是类似于我们的arguments // 区别 arguments是伪数组 剩余参数是真正的数组 //箭头函数没有arguments 但是有剩余参数 function foo(a,b,...c){ // console.log(arguments) console.log(a,b,c); } foo(100,200,300,400,500,600) function bar(...newArg){ console.log(newArg); } bar("张三","李四","王五","赵六"); var fn = (...arg)=>{ console.log(arg); } fn(10,20,30);
-