[英]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.