gpt4 book ai didi

javascript - fn.bind.apply(fn, arguments) 在做什么?

转载 作者:行者123 更新时间:2023-11-29 18:06:32 29 4
gpt4 key购买 nike

我看到这个快捷方式作为代码 Kata 的答案给出,但我很难理解下面的示例在做什么。

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

所以我们是 applying bindfn,返回

fn.bind(arguments[0]/* doesn't matter, it's fn*/, arguments[1], arguments[2], etc.)

因此调用绑定(bind)函数的参数是 fn 之后的 func 的参数。

另一种写法是:

function func(fn) {
var args = [].slice.call(arguments, 1);
return function () {
var localArgs = [].slice.call(arguments);
return fn.apply(fn, args.concat(localArgs));
};
}

调用的上下文是初始函数 (arguments[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

示例 2,currying :

function multiply(a,b){
return a*b
}
var multBy2 = func(multiply, 2);
console.log(multBy2(3)) // logs 6

关于javascript - fn.bind.apply(fn, arguments) 在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30754868/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com