类数组对象中(长得像一个数组,本质上是一个对象):arguments

常见的对arguments的操作是三个
  1. 获取参数的长度  arguments.length
  2. 根据索引值获取某一个参数 arguments[i]
  3. 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老师