這是來自「機鋒的JavaScript」一書爲例(我想你知道這本書):JavaScript中的一個函數如何以不同的方式被「定義」兩次?
function groupBy(array, groupOf) {
var groups = {};
array.forEach(function(element) {
var groupName = groupOf(element);
if (groupName in groups)
groups[groupName].push(element);
else
groups[groupName] = [element];
});
return groups;
}
var byCentury = groupBy(ancestry, function(person) {
return Math.ceil(person.died/100);
});
的代碼做什麼並不是很重要。
問題是:groupBy
函數有兩個不同的'body',即它完全不同的東西,據我所知。在第一個例子中,它做了很多邏輯,但是第二次,它第一次有不同的第二個參數(function(person)
而不是groupOf
,第二,它只是分割一個數組元素屬性(這是死亡日期由100
一個人在39人)數組怎麼會這樣,同樣的功能也不同的東西?我不明白,
相同功能的這兩種情況下莫名其妙地合作,但究竟是一般的原則這種合作的?
謝謝!
函數聲明與函數調用混淆在一起。第一個是定義該功能的功能。第二次用參數 – abhishekkannojia
調用它第二次調用函數並傳遞一個函數作爲第二個參數。 –
你現在應該做的一件事是學習如何使用JavaScript調試器。如果你在代碼的最上面放置了一個'debugger;'語句,你可以在開發工具打開的任何瀏覽器中加載它。它將停止在'debugger;'語句中。然後點擊Step In按鈕,看看會發生什麼。在查看當前狀態並理解它之後,請繼續單擊「步入」。每次點擊它時,它都會跳到下一個要執行的語句。那麼你很快就會明白髮生了什麼。這是一個[Chrome DevTools指南](https://developer.chrome.com/devtools)。 –