2013-05-18 7 views
8

मान लीजिए कि किसी एक HTML दस्तावेज़ (उदाहरण के लिए शरीर) में इनलाइन जावास्क्रिप्ट कोड है, जावास्क्रिप्ट का यह टुकड़ा हमेशा JQuery दस्तावेज़-तैयार कोड से पहले निष्पादित किया गया है?क्या इनलाइन/ब्लॉक जावास्क्रिप्ट दस्तावेज़ तैयार होने से पहले निष्पादित है?

उदाहरण के लिए, निम्नलिखित सुरक्षित है?

... 
<body> 
    <script type="text/javascript"> 
     var myVar = 2; 
    </script> 
    ... 
</body> 

... 
$(document).ready(function() { 
    alert('My Var = ' + myVar); 
} 

यदि नहीं, तो मैं कैसे कर सकते हैं यह सुरक्षित जानते हुए भी myVar एक इनलाइन/ब्लॉक कोड में परिभाषित किया गया है?

उत्तर

10

हां, उपर्युक्त कोड सुरक्षित है। इनलाइन जेएस को निष्पादित किया जाता है क्योंकि यह सामना किया जाता है जबकि दस्तावेज़ को ऊपर से नीचे पार्स किया जा रहा है। दस्तावेज़ तैयार हैंडलर निष्पादित किया जाता है जब दस्तावेज़ तैयार होता है (स्पष्ट रूप से), और यह तब तक तैयार नहीं होगा जब तक पूरे दस्तावेज़ को इनलाइन स्क्रिप्ट सहित पार्स किया गया हो।

ध्यान दें कि आपको दस्तावेज़ तैयार करने वाले हैंडलर की वास्तव में आवश्यकता नहीं है यदि आप उस कोड को शामिल करते हैं जो दस्तावेज़ दस्तावेज़ में आखिरी चीज़ के रूप में लपेटता है, क्योंकि उस बिंदु पर न केवल अन्य इनलाइन जेएस निष्पादित होगा बल्कि सभी दस्तावेज़ तत्वों को डीओएम में जोड़ा जाएगा और इस प्रकार जेएस से पहुंचा जा सकता है।

7

हां, इनलाइन जावास्क्रिप्ट को निष्पादित किया गया है जबकि HTML को पार्स किया गया है।

यह तब तक सुरक्षित है जब तक कि आप किसी DOM तत्व का संदर्भ प्राप्त करने का प्रयास न करें जिसे अभी तक पार्स नहीं किया गया था (यानी, HTML सॉर कोड में स्क्रिप्ट ब्लॉक के बाद कोई तत्व)। आप पहले स्क्रिप्ट ब्लॉक (जब तक वे दायरे में हैं) पर परिभाषित किसी भी चर का संदर्भ भी दे सकते हैं।

और, जैसा कि मैट ब्राउन ने अपनी टिप्पणी में बताया, यह आम तौर पर सुरक्षित है कि आप डोमकंटेंटलोडेड श्रोता (या पुरानी आईई वर्कअराउंड, या विंडो.ऑलोड) का उपयोग न करें, अगर आप अपनी स्क्रिप्ट डालते हैं जो डीओएम पर ठीक पहले लोड हो रहा है बंद </body> टैग। उस बिंदु पर, सभी HTML तत्व पहले ही डीओएम में होंगे (जब तक आपके पास </body> के बाद और तत्व नहीं हैं, जो अमान्य HTML होगा)।

+3

एक संबंधित नोट: यह आमतौर पर '$ (दस्तावेज़) .ready()' का उपयोग न करने के लिए सुरक्षित है यदि आप अपनी स्क्रिप्ट डालते हैं जो बंद होने पर ठीक है '' टैग से पहले। –

+3

नोट के बारे में एक नोट: jQuery पर निर्भर स्क्रिप्ट jquery.js को शामिल करने के बाद कहीं भी हो सकती है। लेकिन हम जानते हैं कि @ मैटब्रॉने का अर्थ क्या था: स्क्रिप्ट जो तैयार होने वाले डीओएम पर निर्भर करती है, उसे तैयार हैंडलर की बजाय शरीर के अंत में रखा जा सकता है। – nnnnnn

+0

@nnn सटीक – bfavaretto

1

यह मानना ​​सुरक्षित है कि myVAr$(document).ready(function() {}) के भीतर से पहुंच योग्य है।

यदि आप अपने एचटीएमएल में कोड चलाते हैं, तो myVarwindow जेएस वैश्विक वस्तु (यानी window.myVar) की संपत्ति बन जाता है। मुझे नहीं लगता कि इसे jQuery फ़ंक्शन में स्थानीय रूप से बनाना आवश्यक है।

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