2013-06-04 5 views
5

के लिए एक संभावित समाधान मैं John Resig की Learning Advanced JavaScript स्लाइड पढ़ रहा था।फ़ंक्शन लूपिंग

प्रश्नोत्तरी:

के रूप में मैं slide-27 के लिए आया था, जॉन नीचे के अनुसार एक प्रश्नोत्तरी प्रस्तुत करता है हम एक कॉलबैक के साथ कैसे पाशन लागू कर सकते हैं?

function loop(array, fn){ 
    for (var i = 0; i < array.length; i++) { 
    // Implement me! 
    } 
} 
var num = 0; 
loop([0, 1, 2], function(value){ 
    assert(value == num++, "Make sure the contents are as we expect it."); 
    assert(this instanceof Array, "The context should be the full array."); 
}); 

मैं लागू करने की कोशिश की, और निम्न कोड के साथ आया था:

function loop(array, fn){ 
    for (var i = 0; i < array.length; i++) { 
    fn.call(array, array[i]); 
    } 
} 
var num = 0; 
loop([0, 1, 2], function(value){ 
    assert(value == num++, "Make sure the contents are as we expect it."); 
    assert(this instanceof Array, "The context should be the full array."); 
}); 

मुझे खुशी है कि यह काम किया, और उत्सुक समाधान जॉन अगले में प्रदान करेगा के साथ तुलना करना अगली स्लाइड देख रहा था फिसल पट्टी।

लेकिन अगली स्लाइड में जॉन निम्नलिखित समाधान प्रदान: fn समारोह वह loop() के लिए पारित करने के लिए

function loop(array, fn){ 
    for (var i = 0; i < array.length; i++) 
    fn.call(array, array[i], i); 
} 
var num = 0; 
loop([0, 1, 2], function(value, i){ 
    assert(value == num++, "Make sure the contents are as we expect it."); 
    assert(this instanceof Array, "The context should be the full array."); 
}); 

, वह एक अन्य पैरामीटर i गयी।

जो मुझे आश्चर्यचकित करता है कि एक और पैरामीटर क्यों आवश्यक है ??

+0

यह सुविधा के लिए है। आप लूप के भीतर 'i' प्रिंट करना चाह सकते हैं। – elclanrs

उत्तर

1

सामान्य for लूप में, शरीर को i सूचकांक तक पहुंच है। यदि कॉलबैक समाधान इस के प्रतिस्थापन के रूप में है, तो यह जानकारी भी उपलब्ध होनी चाहिए। उदाहरण के लिए, अद्वितीय पहचानकर्ता बनाने के लिए यह उपयोगी हो सकता है। तो हम इसे पैरामीटर के रूप में पास करते हैं।

संबंधित मुद्दे