更高阶的javascript函数

时间:2015-05-03 21:46:45

标签: javascript anonymous-function higher-order-functions

有人可以向我解释以下代码中发生了什么。该函数正在接收 <div class ="container"> <h3>PROVIDER ENROLLMENT APPLICATION</h3> </div> <div class ="tabs"> <a href="tabsA.html"><span>Sec A</span></a> <a href="tabsB.html"><span>Sec B</span></a> <a href="tabsC.html"><span>Sec C</span></a> <a href="tabsD.html"><span>Sec D</span></a> <a href="tabsE.html"><span>Sec E</span></a> <a href="tabsF.html"><span class="active">Sec F</span></a> <a href="tabsG.html"><span>Sec G</span></a> <a href="tabsH.html"><span>Sec H</span></a> <a href="tabsI.html"><span>Sec I</span></a> <a href="tabsJ.html"><span>Sec J</span></a> <a href="tabsK.html"><span>Sec K</span></a> <a href="tabsL.html"><span>Sec L</span></a> <a href="tabsM.html"><span>Sec M</span></a> </div 作为参数,那么n来自何处?整个代码令人困惑..如果有人可以解释?

m

5 个答案:

答案 0 :(得分:7)

这展示了一种名为currying的函数式编程技术。 (也与partial function appliction相关)

大于>通常需要2个参数(一个在左边,一个在右边)。这是一种一次送一个的方式。

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

greaterThan(10)(11);

从上面的示例中可以看出,10传入了n参数,然后11传递了m参数。< / p>

传递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

答案 1 :(得分:6)

m11,在第二次通话期间传入。

当您致电greaterThan(10)时,它会返回一个新功能,如下所示:

function(m) {
    return m > 10;
}

然后保存为greaterThan10。这称为currying

答案 2 :(得分:2)

a0是一个返回另一个函数的函数,greaterThan是该返回函数的paraterer。所以在你的代码中: m

var greaterThan10 = function(m) { return m > 10; };console.log(greaterThan10(11));

相同

答案 3 :(得分:2)

当你调用函数greaterThan时,它会返回另一个函数,但不会返回一些浮点数。内部函数知道n,因为它在函数greaterThan内。

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

var result = greaterThan(10)(11);

第一个参数10将用于包装函数,但结果是函数,因此您可以立即传递内部函数的参数。 只有拥有return function(){...}

,才有可能实现这一目标

你可以试试像

这样的东西
var a = function (x){
         return function(y){
            return function(z){
              return x*y*z;
            }
          }
        }
var result = a(5)(3)(8); 

答案 4 :(得分:1)

你有两个功能。

n来自第一个函数的调用。

m来自第二个函数(第一个函数的返回值)被调用。

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