函数与使用slice的参数一起应用

Function apply with arguments using slice

本文关键字:参数 一起 应用 slice 函数      更新时间:2024-02-21

查看本教程,我在一条注释中看到了以下代码建议:

init:function(callback){
            var that =this ;
            return $http.jsonp(this.url).success(
                function(data){
                    that.availableGenres = that.getGenres(data);
                    that.results = that.getResults(data);
                    if(callback)callback.apply(null,[].slice.call(arguments))
                }
            )
        }

但这条线路callback.apply(null,[].slice.call(arguments))在我看来很奇怪。

为什么不只是:callback.apply(null, arguments)?因为我不喜欢我不理解我用这个Fiddle玩的东西的意义,以理解其中slice函数的需求。但它给了我同样的结果,我仍然没有得到它

有人知道为什么需要slice吗?

您并不真正需要它,直接将arguments传递给apply即可。

它在EcmaScript 3中被指定为允许,EcmaScript 5甚至允许任何类似数组的对象,而不仅仅是数组和参数对象。也许它需要与更早或有缺陷的JS实现向后兼容。此外,(正如你从其他答案中看到的),有些人不知道这个事实,认为他们需要传递实际的数组,所以他们没有必要小心。

需要

slice,因为function.apply需要一个数组,arguments不是真正的数组,但可以使用slice转换为一个数组。

arguments对象不是Array。它类似于数组,但是除了长度之外,没有任何数组属性。例如,它确实没有pop方法。然而,它可以转换为真正的阵列:

var args = Array.prototype.slice.call(arguments);

这是javascript 的丑陋部分之一