2012-06-16 29 views
6

Tôi đang học javascript. Tôi biết chúng ta có thể chuyển một hàm tới các hàm khác sau khi hàm được định nghĩa. Nhưng tôi cần trợ giúp để hiểu ví dụ này:javascript: Đang chuyển các chức năng

function map(func, array) { 
    var result = []; 
    forEach(array, function (element) { 
    result.push(func(element)); 
    }); 
    return result; 
} 

Từ những gì tôi có thể hiểu, func là một đối số của bản đồ. Tôi cần phải cung cấp một chức năng như func. Nhưng trong hướng dẫn tôi đang đọc, nó không đề cập đến nơi func này đến từ, dường như không cần phải xác định đối số này? Một ví dụ khác trong hướng dẫn này giống nhau:

function count(test, array) { 
    return reduce(function(total, element) { 
    return total + (test(element) ? 1 : 0); 
    }, 0, array); 
} 

Hàm thử này bằng phần tử === 0? 1: 0, nhưng hướng dẫn không nói rằng tôi cần viết chức năng kiểm tra. Tôi có cần phải viết chức năng kiểm tra này không?

+0

Hướng dẫn ở đâu? –

+0

Có thể đó là [w3schools] (http://www.w3schools.com/). –

+0

http://eloquentjavascript.net/chapter6.html#p31aabc64 – Jenny

Trả lời

4

EDIT: Trong liên kết để hướng dẫn bạn đăng, các chức năng thông qua là một xác định trước chức năng Math.round. Ví dụ của tôi dưới đây cho thấy việc tạo ra chức năng của riêng bạn để vượt qua.


Ví dụ map cho thấy việc triển khai. Bạn sẽ cung cấp chức năng (và Mảng) khi bạn gọi map.

Từ giao diện của nó, các map vượt qua mục hiện tại trong mảng để chức năng của bạn, và chức năng của bạn nên làm điều gì đó với nó và trả về kết quả. Kết quả trả về hàm của bạn được thêm vào mảng mới.

var arr = [1,2,3,4,5]; 
var my_func = function(item) { return item * 2; }; 

var new_arr = map(my_func, arr); 

console.log(new_arr); // [2,4,6,8,10] 
  1. chúng tôi tạo ra một mảng (arr),

  2. chúng tôi tạo ra một hàm (my_func), trong đó có bất cứ điều gì nó được đưa ra, và sẽ nhân nó bằng 2.

  3. chúng tôi đã chuyển cả hai đến map

  4. chức năng map lặp lại số arr của chúng tôi, chuyển mục hiện tại trong mỗi lần lặp đến hàm của chúng tôi.

  5. chức năng của chúng tôi sẽ đưa các mục hiện hành, và trả về kết quả của nhân nó bằng 2.

  6. các map chức năng có kết quả đó, và thêm nó vào mảng mới.

  7. khi lặp lại được thực hiện, hàm map trả về Mảng mới.

+0

Cảm ơn bạn đã trợ giúp. Sau khi đọc câu trả lời của bạn, tôi chỉ tìm ra các bằng là kiểm tra chức năng. – Jenny

0

Khi bạn gọi bản đồ, bạn chuyển chức năng nội tuyến hoặc chức năng hiện có.

// The following would return [2,3,4] 
map(function(item) { return item + 1}, [1,2,3]); 

function double(item) {return item*2} 
map(double, [1,2,3]) 
// returns [2,4,6] 

// Your example, Math.round 
map(Math.round, [0.01, 2, 9.89, Math.PI]) 
// returns [0,2,10,3] 

Một cách khác để nói, hàm có thể được chuyển đến một hàm khác giống như bất kỳ đối số nào khác.Đây là trên cùng một dòng mà một hàm giống như bất kỳ biến nào khác có thể được chuyển hoặc trả về từ hàm

function createAdder(toAdd) { 
    return function (num) { 
     return num + toAdd; 
    } 
} 

var add5 = createAdder(5); 
add5(2); // returns 7 


var add7 = createAdder(7); 
add7(-2); // returns 5 
Các vấn đề liên quan