2015-07-19 39 views
-3

我有一個我能理解的函數。無法理解數組元素如何傳遞給函數的參數

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

當我們調用該函數可以說forEach([1,2,3,4,5], console.log); 的代碼替換在體內的字的console.log字動作。而一切都像一個魅力。對 ?

但在這種情況下與匿名函數我感到困惑。

var numbers = [1, 2, 3, 4, 5], sum = 0; 

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

在這種情況下,我們有一個匿名函數作爲參數。匿名函數如何從數組中逐個取出元素,並將其放入它的參數(數字)?中。

我能讓它在某種程度上更容易理解:

var FindSum = function (number) { 
    sum += number; 
}; 

forEach(numbers, FindSum); 

但我仍然與參數號混淆。 FindSum函數如何接收數字?

+0

的我不知道你的要價,但下面是最後的代碼是有效的 – MayorMonty

+0

林問代碼是如何理解陣列的elemets應的參數號裏面放。 – user2300068

+0

這兩種情況幾乎完全相同。在這兩種情況下,都會傳遞函數引用。首先,你傳遞一個宿主方法(* console.log *)的名字,在第二個函數表達式中傳遞一個函數表達式(如果你願意,可以有一個名字),所以唯一引用它的是* forEach *函數的* action *參數。除此之外,一切都是一樣的。 – RobG

回答

2

這是完全一樣的第一個例子:

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

所以numbernumbers[i]

var numbers = [1,2,3]; 
var FindSum = function (number) { 
    sum += number; 
}; 

forEach(numbers, FindSum); // equals FindSum(1); FindSum(2); FindSum(3); 
+0

我真的不知道的事情是數字如何變成數字[i]的過程。 :/ – user2300068

+0

在你的'forEach'方法中,循環訪問'numbers'array,然後用'numbers [i]/array [i]'調用'FindSum'的動作。 –

1
var numbers = [1, 2, 3, 4, 5], sum = 0; 
forEach(numbers, function(number) { sum += number; }); 

解釋非常簡單的方式:

  1. 脫穎而出ACH帶有一個數組(數字)和一個回調函數(匿名一個,它可以被過命名)

  2. 的forEach然後在數字每個號碼傳遞到匿名功能

  3. 然後,你總結「總和」和當前值數
相關問題