Friday, 15 April 2011

javascript - In for loop, why does i++ change to 1 after second use? -


0 से 1 के लिए लूप में परिवर्तन क्यों करता है?

< P> यह पंक्ति: for (var i = 0; i & lt; siteDatabase.length; i ++) पहले से पाश में 0 से 1? वृद्धि? जिसके बाद साइटडाबेस [i] का उपयोग 1 के बजाय 1 सूचक पर तत्व तक पहुंचने के लिए किया जाता है। मैंने सोचा कि मैंने + + 2 लूप पर बढ़ोतरी की है?

परिणाम विधि कॉल (पुश) द्वारा एक अपरिभाषित तत्व के लिए एक त्रुटि है। < / P> <पूर्व> var newsUpdates = {}; Var siteDatabase = ["http://example.to"]; Var स्क्रैपरज = की आवश्यकता होती है ('स्क्रेपरज'); के लिए (var i = 0; i & lt; siteDatabase.length; i ++) {समाचार [साइटडेटाबेस [i]] = []; Scraperjs.StaticScraper.create (siteDatabase [i])। Scrape (फ़ंक्शन ($) {वापसी $ ("। Lang_English")। नक्शा (फ़ंक्शन () {वापसी $ (यह)। बच्चे ('टीडी')। Eq (1 ) (बच्चे) ('a')। पिछले ()। पाठ ();})। Get ();}, फ़ंक्शन (समाचार) {for (var x = 0; x & lt; news.length; x ++) {if ( समाचार [x] == '') {news.splice (x, 1);}} के लिए (var x = 0; x & lt; news.length; x ++) {// i साइट में डेटाबेस [i] 0 नहीं है, पुश ({"शीर्षक": समाचार [x]}); // प्रकार: त्रुटि: अपरिभाषित की विधि 'धक्का' कॉल नहीं कर सकता console.log (newsupdates);})}} < / कोड>

समस्या उस क्षेत्र पर है जो मैं कोड के बीच टिप्पणी करता हूं।

जिस कार्य में आप .scrape में गुजर रहे हैं एक स्थायी संदर्भ को i चर में, उस की एक प्रति जैसी नहीं जब फ़ंक्शन बनाई गई थी। तो यह i के मूल्य का उपयोग करता है जब फ़ंक्शन चलाता है , जो कि (संभवतः) बाद में लूप समाप्त होने के बाद, जब i

इस मामले में, मैं शायद कॉलबैक बनाने के लिए एक बिल्डर फ़ंक्शन का उपयोग कर रहा था, ताकि कॉलबैक उस चीज़ को बंद कर दे जो कि नहीं बदलता है:

  Var समाचार अद्यतन = {}; Var siteDatabase = ["http://example.to"]; Var स्क्रैपरज = की आवश्यकता होती है ('स्क्रेपरज'); के लिए (var i = 0; i & lt; siteDatabase.length; i ++) {समाचार [साइटडेटाबेस [i]] = []; Scraperjs.StaticScraper.create (siteDatabase [i])। Scrape (फ़ंक्शन ($) {वापसी $ ("। Lang_English")। नक्शा (फ़ंक्शन () {वापसी $ (यह)। बच्चे ('टीडी')। Eq (1 ) (बच्चे) ('ए') अंतिम ()। पाठ ();}), ();}, बिल्ड कॉलबैक (i)}} फ़ंक्शन बिल्डकेलैक (इंडेक्स) {रिटर्न फ़ंक्शन (समाचार) {for (var x = 0 ; एक्स और लेफ्टिनेंट; न्यूज़ लैलेथ; x ++) {यदि (न्यूज [x] == '') {न्यूज़स्प्लस (एक्स, 1); }} के लिए (var x = 0; x & lt; news.length; x ++) {newsUpdates [siteDatabase [inindex]]। पुश ({"शीर्षक": समाचार [x]}); } Console.log (समाचार अद्यतन); }; }  

वहां, हम build कॉलबैक से बाहर आने वाले फ़ंक्शन को अनुक्रमणिका तर्क से बंद कर देते हैं, जिसका मान कभी भी नहीं बदलता है इसके बाद हम इसे i में भेजते हैं ताकि हमारे कॉलबैक का निर्माण करें।


No comments:

Post a Comment