0


【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)
                }
            }
        }
标签: javascript

本文转载自: https://blog.csdn.net/weixin_48813932/article/details/122931457
版权归原作者 悠悠-wzr 所有, 如有侵权,请联系我们删除。

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

还没有评论