js中的内置对象-------函数参数arguments

arguments 函数参数集合

        在每一个函数都存在一个arguments,arguments是一个类数组对象,它具有数组length属性,通过在函数调用arguments,我们可以获取函数参数,即使函数没有设置形参,我们也可以通过arguments获取到实参。

可以类似数组使用for循环进行遍历

    function Fn() {
        for(let i = 0;i<arguments.length;i++) {
            console.log(arguments[i])
        }
    }
    Fn(1,2,3,4,5,6,7)

通过typeof我们可以看出arguments类型本身依旧是对象属性,并不是数组属性,无法调用数组方法,类似push,pop,slice,forEach等等

    function Fn() {
        console.log(typeof arguments)
    }
    Fn(1,2,3,4,5,6,7)

 将arguments打印出来查看其中的方法,我们可以发现除了函数参数和length属性,arguments存在callee方法和Symbol迭代器。

Symbol迭代,arguments可以通过Symbol迭代器进行迭代

    function Fn() {
        let iter = arguments[Symbol.iterator]()
        console.log(iter.next())
        console.log(iter.next())
        console.log(iter.next())
        console.log(iter.next())
    }
    Fn(1,2,3)

 

callee方法对应的是返回正在被调用的函数,通过调用arguments.callee,我们可以调用Fn函数

    function Fn() {
        console.log(arguments.callee==Fn)
    }
    Fn()

通过使用callee我们可以减少耦合的情况出现,但由于arguments是一个很大的对象,每次访问arguments都需要创建一个对象,消耗内存,影响浏览器性能,因此callee现在不建议推荐使用。

在js开启严格模式下,arguments calle caller被禁止使用,使用会报错。报错内容为:

 Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

    'use strict'
    function Fn() {
        console.log(arguments.callee)
    }
    Fn(1,2,3)

 如有问题和错误,欢迎大家在评论区下进行讨论和指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值