Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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_Anonymous Function_Higher Order Functions - Fatal编程技术网

高阶javascript函数

高阶javascript函数,javascript,anonymous-function,higher-order-functions,Javascript,Anonymous Function,Higher Order Functions,有人能给我解释一下下面的代码是怎么回事吗。函数正在接收n作为参数,那么m从哪里来?整个代码令人困惑。。如果有人能解释 function greaterThan(n) { return function(m) { return m > n; }; } var greaterThan10 = greaterThan(10); console.log(greaterThan10(11)); // → true m是11,在第二次调用期间传入 当您调用大于(10)的

有人能给我解释一下下面的代码是怎么回事吗。函数正在接收
n
作为参数,那么
m
从哪里来?整个代码令人困惑。。如果有人能解释

  function greaterThan(n) {
  return function(m) { return m > n; };
  }
   var greaterThan10 = greaterThan(10);
   console.log(greaterThan10(11));
   // → true

m
11
,在第二次调用期间传入

当您调用大于(10)的
时,它将返回一个新函数,如下所示:

function(m) {
    return m > 10;
}

然后将其保存为
大于10
。这被称为。

这展示了一种称为的函数式编程技术。(也与之相关)

大于
通常需要两个参数(一个在左边,一个在右边)。这是一种一次喂一只的方法

如果将其称为“内联”,可能更容易看到发生了什么:

greaterThan(10)(11);
从上面的示例中可以看到,
n
参数传入
10
,然后
m
参数传入
11

通过
10
的第一个应用程序输出如下所示的函数:

function(m) { return m > 10; };
这是部分应用程序中的第一个应用程序

从那里很容易看到如何传入
11
以获得最终结果

因此,要分解它:

function greaterThan(n) {
   return function(m) { return m > n; };
}

//var greaterThan10 = greaterThan(10); -- is equivalent to:
var greaterThan10 = function(m) { return m > 10; };

console.log(greaterThan10(11));  //--> true

这里有两个函数

n
来自调用第一个函数时

greaterThan10 = greaterThan(10);
//                          ^^  n
greaterThan10(11))
//  ^^ returned function
//            ^^ m
m
来自调用第二个函数(第一个函数的返回值)时

greaterThan10 = greaterThan(10);
//                          ^^  n
greaterThan10(11))
//  ^^ returned function
//            ^^ m

greaterThan
是一个返回另一个函数的函数,
m
是该返回函数的paraterer。因此,在您的代码中:
var greaterThan10=函数(m){返回m>10;}


console.log(大于10(11))
console.log相同(11>10)

当您调用大于
的函数时,它返回另一个函数,但不返回浮点数。内部函数知道
n
,因为它在函数内部

因为包装器函数返回另一个函数,所以可以像这样调用第二个函数

var result = greaterThan(10)(11);
第一个参数
10
将用于包装函数,但结果是函数,所以您可以立即传递内部函数的参数。 只有当您有
返回函数(){…}

你可以试试类似的东西

var a = function (x){
         return function(y){
            return function(z){
              return x*y*z;
            }
          }
        }
var result = a(5)(3)(8);