簡體   English   中英

這個“高階函數”在Javascript中是如何工作的

[英]How does this “higher-order functions” thing works in Javascript

在Marijn Haverbeke的《 Eloquent Javascript 》一書中,有一個示例介紹了高階函數的概念:

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

我不太確定這是如何工作的……可能回答了我自己的問題,但這是我的看法:

  • 首先,在此行中調用greaterThan(n) ,並將其值分配給greaterThan10變量:

     var greaterThan10 = greaterThan(10); 
  • 這使得存儲為greaterThan10的函數如下所示:

     function greaterThan(10) { return function(m) { return m > 10; }; } 
  • 然后,當您調用greaterThan10(11)您正在調用上面的函數,該函數轉換為:

     function greaterThan(10) { return function(11) { return 11 > 10; }; } 

    因此,將結果作為11 > 10返回True確實是正確的。

有人可以確認我是否正確嗎? 另外,如果有人可以提供有關此高階函數如何在JavaScript中工作的更多詳細信息和評論,將不勝感激。

從某種程度來說,您是正確的,但是對它的評估略有不同。

var greaterThan10 = greaterThan(10);

這行代碼不會使存儲為greaterThan10的函數“看起來像”任何東西-它創建了一個新函數,將變量n傳遞給它,以便greaterThan10變成了一個看起來像

var greaterThan10 = function(m) { return m > 10; };

當您調用它時,您將直接調用此函數,而不再使用原始函數了。

在閱讀示例時,我也感到困惑,但后來得出如下結論:

在第3章:函數中,已經說明了如何使用箭頭符號( => )聲明函數。 箭頭符號位於參數列表的后面,如果只有一個參數,則可以在參數列表周圍省略括號。 因此, m是參數而不是函數名稱。

因此,在第一次調用greaterThan(10)greaterThan10本質上成為

var greaterThan10 = function (m) { return m > 10; }

在第二個調用greaterThan10(11) ,它變為

function (11) { return 11 > 10; }

11> 10,則返回true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM