震惊!!!一眼就能看懂的arguments用法问题!!!!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值