关于slice.call(arguments, 1) 的思考

2017-12-14  本文已影响0人  A云A

今天在跟踪调试Robyn项目的代码时,发现在一个function中用到了这么一段[].slice.call(arguments, 1) 的代码。心中便起了疑惑,对于slice 和 call 的方法,倒是不怎么陌生,解析了下上面的那段代码,就是为了获取arguments 从1 开始到结尾的所有元素。只是觉得奇怪为什么不直接用 arguments.slice(1) 这样去使用呢?(PS:JS当初是啃了《JavaScript权威指南》,可是后面也没有怎么深入去用,最近转来开发HTML5 Game 时,才发现好多基础的东西都忘记的差不多了,汗!!!)。于是,就自己先做了下面的测试:

有些技术用久了,使用方法都是懂的,听到技术名称就一脸懵逼了。

今天看了看柯里化(英语:Currying)到底是啥意思找了些资料,说是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。看说明也没什么的,无形当中使用的非常频繁的。看下实现代码是这样的~

function currying(fn) {

    var slice = Array.prototype.slice,

    __args = slice.call(arguments, 1);

    return function () {

        var __inargs = slice.call(arguments);

        return fn.apply(null, __args.concat(__inargs));

    };

}

详细了看一下这里

引起我注意的是 __args = slice.call(arguments, 1);

上一篇下一篇

猜你喜欢

热点阅读