Here's an example ऐसी स्थिति का जहां एक साधारण जेएस लूप अपेक्षित व्यवहार नहीं करता है, क्योंकि लूप वैरिएबल एक अलग दायरे में नहीं है।लूप के लिए जावास्क्रिप्ट फ़ंक्शन स्कोप्ड
for (var i in obj) {
(function() {
... obj[i] ...
// this new shadowed i here is now no longer getting changed by for loop
})(i);
}
मेरा प्रश्न है, इस पर सुधार किया जा सकता है:
अक्सर प्रस्तुत समाधान है कि इस तरह दिखता है पाश कोड की एक अप्रिय दिखने बिट के निर्माण के लिए है? क्या मैं इसका उपयोग कर सकता हूं:
Object.prototype.each = function (f) {
for (var i in this) {
f(i,this[i]);
}
};
// leading to this somewhat more straightforward invocation
obj.each(
function(i,v) {
... v ...
// alternatively, v is identical to
... obj[i] ...
}
);
जब मुझे पता चलता है कि मुझे "स्कॉप्ड लूप" की आवश्यकता है? यह कुछ हद तक साफ दिख रहा है और नियमित रूप से लूप के समान प्रदर्शन होना चाहिए (क्योंकि यह इसे उसी तरह उपयोग करता है)।
अद्यतन: ऐसा लगता है कि Object.prototype
के साथ चीजें करना बहुत बड़ा नहीं है क्योंकि यह सब कुछ तोड़ता है।
यहाँ एक कम दखल दिया गया है:
function each (obj,f) {
for (var i in obj) {
f(i,obj[i]);
}
}
मंगलाचरण बहुत
each(obj,
function(i,v) {
... v ...
}
);
तो मुझे लगता है कि मैं अपने ही सवाल का जवाब दे दिया है, अगर jQuery यह इस तरह से करता है करने के लिए थोड़ा परिवर्तन, कर सकते हैं वास्तव में गलत नहीं है। किसी भी मुद्दे को मैंने अनदेखा किया है हालांकि एक जवाब वारंट होगा।
जेएस पुस्तकालयों को देखें कि वे 'ऑब्जेक्ट.एच()' शिम को कैसे कार्यान्वित करते हैं। प्रदर्शन और अनुकूलन के लिए, [JSPerf] (http://jsperf.com) का उपयोग करके अपने कोड का परीक्षण करें और आप [CodeReview] (http://codereview.stackexchange.com/) पर पूछ सकते हैं – Joseph
हां मैंने एक नज़र डाली 'jQuery.each() 'अभी अभी और ऐसा लगता है कि मेरा कार्यान्वयन बस उनके तर्क आदेश को फिसलता है और कम करता है (वास्तव में, वास्तव में) चेक करता है। –