外部函数接收三个参数,里面的函数只需要一个参数或者需要四个参数的时候,里面的函数的参数怎么被赋值的?
var optimizeCb = function(func, context, argCount) {
// 如果没有指定 this 指向,则返回原函数
if (context === void 0) return func;
switch (argCount == null ? 3 : argCount) {
case 1: return function(value) { //这里的value从哪里来的
return func.call(context, value);
};
case 2: return function(value, other) { //这里的other从哪里来的
return func.call(context, value, other);
};
// 如果有指定 this,但没有传入 argCount 参数
// 则执行以下 case
// _.each、_.map
case 3: return function(value, index, collection) { //还有这里的index,collection
return func.call(context, value, index, collection);
};
// _.reduce、_.reduceRight
case 4: return function(accumulator, value, index, collection) { //这里的accumulator
return func.call(context, accumulator, value, index, collection);
};
}
return function() {
return func.apply(context, arguments);
};
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这不就是闭包吗,当你调用外层函数的时候,返回了一个新的函数,然后你再给返回的函数传值
例如:
optimizeCb
返回了一个函数,你有疑问的那些参数会在这个返回的函数调用的时候传入的。那是被return的函数的形参,调用的时候传实参才用的上。
比如:
你运行下就懂了