arguments 是一个类数组对象。代表传给一个function的参数列表
arguments的三种用法
(1)可以用来传输实参的真实长度,因为有时实参传递的个数不一定和形参的个数相等
function fn1(a,b,c) {
for(var i=0;i<arguments.length;i++) {
console.log(arguments[i],'fn1') // 10,20,30,进行遍历
}
}
fn1(10,20,30)
(2)可以解决函数重名的情况,为了避免使用重复的函数名
function fn2() {
if(arguments.length == 1) {
console.log(arguments[0]) // 10
}else if(arguments.length == 2) {
console.log(arguments[0] + arguments[1]) // 30
}
}
fn2(10)
fn2(10,20)
(3)直接查看实参传递的参数
function fn3(a,b) {
console.log(arguments[0],arguments[1],arguments[2]) // 10,20,30
console.log(arguments.length) // 4
}
fn3(10,20,30,40)
箭头函数中的this和arguments指向
箭头函数是没有this和arguments变量的,如果出现了这两个变量,他们一定来自父级作用域
例子1
function fn3() {
this.a = 1;
let b = () => console.log(this.a) // 1,this指向父级的fn3
b()
}
fn3()
例子2
function fn4() {
return () => console.log(arguments[0])
}
fn4(3)(4) // 3
例子3
function fn5() {
// …arguements可以在不知道实参数量和类别时,代表所有实参
console.log(…arguments) // 1,2,3,4,5,6
}
fn5(1,2,3,4,5,6)
for(let i=0;i<=5;i++) {
(function(j){
setTimeout( function timer () {
console.log(j) // 0,1,2,3,4,5,6
}, j*1000)
})(i)
}
给每个i一个块作用域,避免循环结束才执行计时器一直输出6