2013-07-12 41 views
6

Điều này không hoàn toàn cần thiết, tôi chỉ đang cố gắng đơn giản hóa mã của mình. Đây là những gì tôi có:Javascript gọi hàm nhiều lần với các đối số

function fillWebsitePlaceFiller(number) { 
    document.getElementById("placefillerWebsite" + number).innerHTML = placefillerWebsite; 
    } 

      fillWebsitePlaceFiller(1); 
      fillWebsitePlaceFiller(2); 
      fillWebsitePlaceFiller(3); 
      fillWebsitePlaceFiller(4); 
      fillWebsitePlaceFiller(5); 
      fillWebsitePlaceFiller(6); 
      fillWebsitePlaceFiller(7); 

Có cách nào tôi có thể gọi hàm chỉ một lần và nó sẽ chạy qua 7 lần với mỗi đối số?

+7

nó phải là thứ sáu, tất cả các giải pháp vòng lặp điên đang tràn ngập. –

+0

Haha :) @JimRubenstein – eshellborn

Trả lời

24

Phương pháp 1 - Lặp lại

for (var i = 1; i < 8; i++) fillWebsitePlaceFilter(i); 

Phương pháp 2 - đệ quy

(function repeat(number) { 
    fillWebsitePlaceFiller(number); 
    if (number < 7) repeat(number + 1); 
})(1); 

Phương pháp 3 - ứng dụng functor

[1, 2, 3, 4, 5, 6, 7].forEach(fillWebsitePlaceFiller); 

Phương pháp 4 - nội lặp

function fillWebsitePlaceFiller(times) { 
    for (var number = 1; number <= times; number++) { 
     document.getElementById("placefillerWebsite" + number).innerHTML = placefillerWebsite; 
    } 
} 

Phương pháp 5 - mở rộng chức năng hành vi

Function.prototype.sequence = function(from, to) { 
    for (var i = from; i <= to; i++) this.call(null, i); 
}; 

fillWebsitePlaceFiller.sequence(1, 7); 

Phương pháp 6 - XPath (cảnh báo: không kiểm tra)

var query = '//*[@id[starts-with(., "placefillerWebsite"]]'; 
var result = document.evaluate(query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 
while (var node = result.iterateNext()) node.innerHTML = placefillerWebsite; 
+0

+1 chỉ vì có vẻ như bạn đang tận hưởng chính mình. Đệ quy ?? Sheesh. :-) (Và câu trả lời của bạn bây giờ là hoàn chỉnh nhất trong tất cả các câu trả lời được đăng.) –

+3

Tôi nên dừng lại trước khi bắt đầu quá trình duyệt qua jQuery. – OrangeDog

+0

Wow, tôi đã không mong đợi nhiều! Cảm ơn – eshellborn

4

Một vòng lặp đơn giản!

for (var i = 1; i <= 7; ++i) { 
    fillWebsitePlaceFiller(i); 
} 

Hoặc, chỉ cần một cách dễ dàng, sửa đổi fillWebsitePlaceFiller làm riêng của mình cho vòng lặp:

function fillWebsitePlaceFiller() { 
    for (var i = 1; i <= 7; ++i) { 
     document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite; 
    } 
} 
3

Something như

function fillWebsitePlaceFiller(number) { 
     for(i =0; i < number; i++) 
     document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite; 
     } 
2

sử dụng một vòng lặp

function doTimes(number) { 
    for (var i = 0; i < number; i++) { 
     fillWebsitePlaceFiller(i); 
    } 
} 

doTimes(7); 
5

Với ES6 nó có thể được giải quyết thanh lịch hơn một chút:

[...Array(7)].forEach((_, i) => fillWebsitePlaceFiller(i + 1)) 
Các vấn đề liên quan