Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 作为参数传递的函数的访问参数_Javascript - Fatal编程技术网

Javascript 作为参数传递的函数的访问参数

Javascript 作为参数传递的函数的访问参数,javascript,Javascript,我试图翻转传递给另一个函数的函数的参数: function dash(a,b) { return a + " - " + b; } function flipArgs(fn) { return fn; } flipArgs(dash)(1,2); 目前它返回“1-2”,我需要返回“2-1”。如何访问传递给“flipArgs”函数的参数?您可以执行以下操作: function flipArgs(fn) { return function(){ return fn(arg

我试图翻转传递给另一个函数的函数的参数:

function dash(a,b) {
  return a + " - " + b;
}

function flipArgs(fn) {
  return fn;
}

flipArgs(dash)(1,2);
目前它返回“1-2”,我需要返回“2-1”。如何访问传递给“flipArgs”函数的参数?

您可以执行以下操作:

function flipArgs(fn) {
  return function(){
     return fn(arguments[1], arguments[0]);
  }
}
当然,根据您的需要,您可以使用更大的交换,或者测试
参数。length

您可以这样做:

function flipArgs(fn) {
  return function(){
     return fn(arguments[1], arguments[0]);
  }
}

当然,根据您的需要,您可以使用更大的交换或测试
参数。length

@dystroy答案很好,但有一种更通用的方法,请看:

function dash(a,b,c) {
  return a + " - " + b + " - " + c;
}

function flipArgs(fn) {
  return function(){
    return fn.apply(this, Array.prototype.reverse.call(arguments));
  }
}

var r = flipArgs(dash)(1,2,3);
console.log(r); // 3 - 2 - 1

jshiddle:

@dystroy答案很好,但有一种更通用的方法,请看:

function dash(a,b,c) {
  return a + " - " + b + " - " + c;
}

function flipArgs(fn) {
  return function(){
    return fn.apply(this, Array.prototype.reverse.call(arguments));
  }
}

var r = flipArgs(dash)(1,2,3);
console.log(r); // 3 - 2 - 1

jshiddle:

@FezVrasta-oups,fixed@FezVrastaoups,fixed您应该对参数进行切片,然后将其反转。修改伪数组参数会导致性能问题,因此不建议这样做。它在严格模式和非严格模式下的工作方式也不一样。您应该对参数进行切片,然后将其反转。修改伪数组参数会导致性能问题,因此不建议这样做。它在严格模式和非严格模式下也不一样。