【js高级篇】arguments伪数组的用法与实例场景 超详细

一.什么是arguments?

Function.arguments

arguments是函数的一个属性,储存传入函数的实参,它是一个类数组对象(俗称伪数组)。

注意:如果函数不在执行期间,那么该函数的 arguments 属性的值是 null

这里简单陈述一下,伪数组和数组的关系,伪数组除了有length属性,其他数组API均不可用。

所以如果要使用数组API,必须转换成真数组:

                Array.from(arguments) es6中的数组新增方法

二.arguments的两种作用

        作用一:

                储存函数的所有传递的实参

        作用二:

                在浏览器非严格模式下,会与形参产生隐射关系。

                当形参值发生变化,arguments中储存的对应实参也会发生变化。

三.使用场景

1.new的功能封装实现,call和apply和bind源码实现。

具体代码可见我的上一篇

【js高级篇】手写call apply bind源码 超级详细_悠悠-wzr的博客-CSDN博客

    function Fn(name, age) {
            this.name = name;
            this.age = age
        }

        function CreateObj(callback) {
            //让callback的this指向new创建的对象
            var arg = Array.from(arguments).slice(1);
            //将这个对象的隐式原型(__proto__)指向callback. prototype
            var obj = Object.create(callback.prototype);
            callback.apply(obj, arg);
            //返回这个对象
            return obj
        }
        //实现new
        var newObject = CreateObj(Fn, "xyy", "18");
        console.log(newObject)
        console.log(newObject.__proto__.constructor)

2.柯里化函数封装实现

   // 柯里化:是将一个多参函数,转换成可以每次只传递一个参数的函数、当然也可以传递多参,并且返回一个新的函数接收剩余参数
        //封装过程,将多惨函数作为柯里化函数的回调函数
        //将返回一个新的函数接收剩余参数,这个新的函数可以接收多个或一个参数
        // 柯里化的意义在于高内聚,低耦合
        // curry(add)()(1);
        function curry(callback) {
        //返回新的数组,并把之前的参数保存
            return function father() {
                if (arguments.length < callback.length) {
                //保留当前传递的参数
                    var param = Array.from(arguments)
                    return function f2() {
                        return father(...(param.concat(Array.from(arguments))))
                    }
                } else if (arguments.length == callback.length) {
                    return callback.apply(this, arguments)
                }
            }
        }

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值