2012-06-10 12 views
14

इस समस्या को कभी नहीं मिला, और क्यों नहीं पता कि क्यों। एकमात्र स्पष्टीकरण एक दायरा मुद्दा है।जावास्क्रिप्ट स्क्रिप्ट टैग द्वारा दायरे को परिभाषित करता है?

... 
<script type="text/javascript"> 
    go(); 
    </script> 

    <script type="text/javascript"> 
    function go() 
    { alert(''); } 
    </script> 
... 

यह एक त्रुटि दिखाई देगा:

एक ही पृष्ठ में, मैं जे एस के 2 वर्गों है जाने

परिभाषित नहीं है जहां

... 
    <script type="text/javascript"> 
     go(); 

     function go() 
     { alert(''); } 
     </script> 
    ... 

है काम कर रहा है (जाहिर है)।

क्या <script> टैग जेएस का दायरा बनाता है? मदद?

+7

स्क्रिप्ट टैग का उपयोग करके आपको पहले फ़ंक्शन को परिभाषित करना चाहिए और फिर उसे कॉल करना चाहिए। – undefined

उत्तर

20

यह एक दायरा मुद्दा नहीं है। यदि आप एक स्क्रिप्ट तत्व में एक फ़ंक्शन (वैश्विक दायरे में) परिभाषित करते हैं, तो आप इसे दूसरे में उपयोग कर सकते हैं।

हालांकि, स्क्रिप्ट तत्वों का विश्लेषण किया जाता है और उनका सामना किया जाता है।

Hoisting स्क्रिप्ट तत्वों में काम नहीं करेगा। बाद के स्क्रिप्ट तत्व में परिभाषित एक फ़ंक्शन किसी पुराने स्क्रिप्ट तत्व के प्रारंभिक भाग के दौरान उपलब्ध नहीं होगा।

आपको या तो स्क्रिप्ट तत्वों के क्रम को स्वैप करने की आवश्यकता है, या स्क्रिप्ट के बाद तक फ़ंक्शन कॉल में देरी हो जाती है जो इसे परिभाषित करता है (उदा। इसे onload ईवेंट हैंडलर से जोड़कर)।

<script> 
    function go() { 
     alert(''); 
    } 
</script> 
<script> 
    go(); 
</script> 

या

<script> 
    window.addEventListener("load", function() { 
     go(); 
    }, false); 
</script> 
<script> 
    function go() { 
     alert(''); 
    } 
</script> 
+0

आपका पहला कोड काम नहीं करता है ... (यह मेरे नमूने की तरह है) क्या आप उस कोड को लिखने का मतलब रखते थे? –

+1

आपका पहला उदाहरण अभी भी गलत तरीका है :) – floorish

+0

@ फ़्लोरिश - व्हाउप्स। पकड़ने के लिए धन्यवाद! – Quentin

7

HTML पार्सर अगले तत्व में जाने से पहले अपनी स्क्रिप्ट निष्पादित करने के लिए बंद हो जाता है। तो अगली स्क्रिप्ट तत्व निष्पादित नहीं किया जाता है जब तक कि पहले को निष्पादित नहीं किया जाता है।

इस के बराबर है:

<script> 
document.getElementById("hello") //null because the html parser hasn't met the div yet. 
</script> 
<div id="hello"></div> 
1

एक स्पष्ट त्रुटि के रूप में इस के अन्य कारण है अगर पहले स्क्रिप्ट ब्लॉक में सिंटेक्स त्रुटि है और अपनी संपूर्णता में अस्वीकार कर दिया है, लेकिन दूसरे खंड पर और छूट जाए चलाता है इसका दोस्त कोड

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