隐式参数arguments
类数组对象中(长得像一个数组,本质上是一个对象):arguments
常见的对arguments的操作是三个
- 获取参数的长度 arguments.length
- 根据索引值获取某一个参数 arguments[i]
- callee获取当前arguments所在的函数--相当于打印当前的函数,禁止在内部使用arguments.callee(),这样会导致无限递归,除非有判断终止
类数组意味着他不是一个数组特性,而是一个对象类型:
-
但是他却拥有数组的一些特性,比如length,index
-
但是他没有数组的一些方法,比如foreach、map等
有时候需要将arguments转换成数组对象
function foo(num1,num2){
// 1.自己遍历
var newArr=[]
for(var i=0;i<arguments.length;i++){
newArr.push(arguments[i] * 10)
}
console.log(newArr)
// 2.由于argument不具备数组方法,使用显示绑定将其调用slice方法 ***********不好理解
var newArr2=Array.prototype.slice.call(arguments )
console.log(newArr2)
// 3.方法二的优化版
var newArr3=[].slice.call(arguments)
console.log(newArr3)
// 4.es6语法
var newArr4=Array.from(arguments)
console.log(newArr4)
// 5.rest方法
var newArr5=[...arguments]
console.log(newArr5)
}
foo(10,20,30,40,50)
箭头函数中没有arguments,如果使用了arguments,他将会往上层找到,倘如上层是window,会报错!
在调用箭头函数的情况下打印console.log(arguments),会显示未定义
但是在node环境下运行,是可以打印出当前的arguments,因为
一个js文件会被当成一个模块,这个模块会被包裹在一个函数内,然后执行这个函数,这个函数会调用call,call内部会有自带的一些参数,所以可以打印
感谢coderwhy老师

浙公网安备 33010602011771号