2010-08-10 20 views
7

एक जावास्क्रिप्ट कोड jQuery का उपयोग करता है डिबगिंग जब मैं निम्नलिखित कोड मिला:यह (बेकार?) जावास्क्रिप्ट कोड क्या करता है?

[0, 0].sort(function() 
{ 
    baseHasDuplicate = false; 
    return 0; 
}); 

मेरी समझ जावास्क्रिप्ट के लिए इस कोड सरणी कि हमेशा एक वैश्विक चर सेट हो जाएगा और समानता वापस आ जाएगी तुलना समारोह के साथ दो शून्य से युक्त सॉर्ट जाएगा , जो baseHasDuplicate = false; के समान प्रभाव है।
एक मूल्यवान स्रोत से आ रहा है मुझे लगता है कि मुझे कुछ याद आया। क्या मुझे कुछ याद आया या क्या यह प्रोग्रामिंग असफल रहा है?

उत्तर

12

जैसा कि आप here (चीनी) देख सकते हैं, इस कोड का उपयोग क्रोम के परीक्षण के लिए किया जा सकता है। संपादित करें: पूरी कहानी के लिए नीचे देखें ..

के रूप में लेख में बताया गया है, क्या होता है कि क्रोम को इस तरह से ".sort (...)" विधि का अनुकूलन है कि [0, 0].sort(...) कॉल नहीं होगा दिए गए तुलना समारोह को निष्पादित करें।

लेख से, ".sort (...)" के क्रोम का क्रियान्वयन है कुछ की तरह:

function sort(comparefn) { 
    var custom_compare = (typeof(comparefn) === 'function'); 
    function Compare(x,y) { 
    if (x === y) return 0; 
    if (custom_compare) { 
     return comparefn.call(null, x, y); 
    } 
    ... 
} 

0 === 0 के रूप में सच है, यह comparefn फोन नहीं होंगे।

jQuery के मामले में, यह वैश्विक चर baseHasDuplicate को false पर सेट नहीं करेगा।


संपादित: यदि आप कड़ाके की धूप के स्रोत कोड ब्राउज़, उदाहरण के लिए here (के तहत "कड़ाके की धूप CSS चयनकर्ता इंजन" पीले अनुभाग, "कड़ाके की धूप चर" कहा जाता है के लिए जाना), तो आपको निम्नलिखित विवरण मिल जाएगा:

var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, 
     done = 0, 
     toString = Object.prototype.toString, 
     hasDuplicate = false, 
     baseHasDuplicate = true; 

// Here we check if the JavaScript engine is using some sort of 
// optimization where it does not always call our comparision 
// function. If that is the case, discard the hasDuplicate value. 
// Thus far that includes Google Chrome. 
[0, 0].sort(function(){ 
     baseHasDuplicate = false; 
     return 0; 
});  

डिमस्टिफाइड दिखता है!

+2

थोड़ा कठोर लगता है कि – Dani

+1

ओह जांचने के लिए आसान तरीके हैं, प्रोग्रामिंग हर जगह विफल हो जाती है। कभी-कभी लोग वास्तव में चीजों को करने का बुरा तरीका पसंद करते हैं :) –

+0

@Dani: वास्तव में! हालांकि, कोड का इस्तेमाल किसी और चीज़ के लिए किया जा सकता है ... "जावास्क्रिप्ट निंजा" से सुनना बहुत अच्छा होगा। –

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