Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript fn.bind.apply(fn,参数)在做什么?_Javascript_Arguments - Fatal编程技术网

Javascript fn.bind.apply(fn,参数)在做什么?

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); }; } 是这样吗?对正在发生的事情有任何更清晰的答案或

我看到这个快捷方式是作为代码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
所以我们要
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
基本上没有意义?