关于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);