Javascript fn.bind.apply(fn,参数)在做什么?
我看到这个快捷方式是作为代码Kata的答案给出的,但我很难理解下面的示例到底在做什么Javascript fn.bind.apply(fn,参数)在做什么?,javascript,arguments,Javascript,Arguments,我看到这个快捷方式是作为代码Kata的答案给出的,但我很难理解下面的示例到底在做什么 function func(fn) { return fn.bind.apply(fn, arguments); } 到目前为止,我的理解是bind创建了一个新函数,类似于执行以下操作: function func(fn) { return function () { return fn.apply(fn, arguments); }; } 是这样吗?对正在发生的事情有任何更清晰的答案或
function func(fn) {
return fn.bind.apply(fn, arguments);
}
到目前为止,我的理解是bind创建了一个新函数,类似于执行以下操作:
function func(fn) {
return function () {
return fn.apply(fn, arguments);
};
}
是这样吗?对正在发生的事情有任何更清晰的答案或分类都是非常好的
fn.bind
只是
Function.prototype.bind
所以我们要fn
,返回
fn.bind(arguments[0]/* doesn't matter, it's fn*/, arguments[1], arguments[2], etc.)
因此,调用绑定函数时,参数是func
在fn
之后的参数
另一种写作方式是:
function func(fn) {
var args = [].slice.call(arguments, 1);
return function () {
var localArgs = [].slice.call(arguments);
return fn.apply(fn, args.concat(localArgs));
};
}
调用的上下文是初始函数(参数[0]
)这一事实无疑只是一个副作用。重要的是我们用函数包装参数,但是可以动态地传递其他参数
示例1,包装所有参数:
function add(a,b){
return a+b
}
var f = func(add, 2 ,3); // f is a function which will always apply add to 2 and 3
console.log(f()) // logs 5
function multiply(a,b){
return a*b
}
var multBy2 = func(multiply, 2);
console.log(multBy2(3)) // logs 6
示例2:
function add(a,b){
return a+b
}
var f = func(add, 2 ,3); // f is a function which will always apply add to 2 and 3
console.log(f()) // logs 5
function multiply(a,b){
return a*b
}
var multBy2 = func(multiply, 2);
console.log(multBy2(3)) // logs 6
看看之前的“另一种写作方式”是什么帮助了我。之后是额外的学分。感谢您的解释:)谢谢,很遗憾,我无法投票,但您提供了我希望得到的澄清。因此原始代码示例中
func
的主体可以写成返回函数.prototype.bind.apply(fn,参数)代码>并且仍然完全一样工作?按照最初的编写方式,最初的fn
基本上没有意义?