2013-05-30 127 views
2

我無法理解下面的代碼。我來自Java背景。我應該怎麼讀這個?有什麼好的Java> JavaScript書籍/教程我應該看?Javascript瞭解功能

function sum(numbers) { 
    var total = 0; 

    forEach(numbers, function (number) { 
     total += number; 
    }); 

    return total; 
} 
show(sum([1, 10, 100])); 

http://eloquentjavascript.net/chapter6.html

提取我看在foreach(數字功能(數字)...代碼。如果將匿名函數得到?

回答

2

它的 '數字'從數字中得到數字,foreach所說的是,對於數字中的每個元素,都使用該元素調用匿名函數,然後該元素被稱爲數字,但它可以被稱爲任何東西

5

看看forEach的來源:

function forEach(array, action) { 
    for (var i = 0; i < array.length; i++) 
    action(array[i]); 
} 

forEach接受兩個參數:陣列和回調(即一個函數)。你可以看到它在一個循環中調用回調,每次將「當前」數組元素作爲參數傳遞給它。這就是回調的正式參數number

爲了把這個另一種方式 - 你可以很容易地明白這一點:如果你使用hello你到達代碼就像你展示一個回調

function hello(what) { 
    alert("Hello " + what); 
} 

hello("world"); 

function say(callback, what) { 
    callback(what); 
} 

say(hello, "world"); 

See it in action

最後,您可能會從檢查回調如何工作以及它們的用途中受益。 here是我在這個問題上的另一個答案。

+0

這不是'forEach'的來源... – Alnitak

+0

@Alnitak:它是問題談論的'forEach'的來源,而不是'Array.forEach'。 – Jon

+0

@Alnitak [是的。是的。](http://eloquentjavascript.net/chapter6.html) – h2ooooooo

1

你被困惑的是你沒有看到forEach的底層機制......如果你打開它,你會發現該函數需要一個匿名函數作爲它的第二個參數,它會將所需的任何東西傳遞給IT。所以當你運行你的函數時,你可以期待parm被填充。當你用另一種語言來表達它時,肯定會感到震驚,但你必須相信這些事情是按照他們設計的方式工作的。