आईई गूंगा है, यह पहचान नहीं करता है कि window.varName
और var varName
कुछ मामलों में समान चर का उपयोग करता है।
जब कोई नया स्क्रिप्ट टैग सामना किया जाता है, तो यह पहले var के साथ घोषित सभी चर शुरू करता है। यह var कथन नहीं चलाता है (वह भाग जो इसे "hiya" में प्रारंभ करेगा)। यह सिर्फ इसे अपरिभाषित करने के लिए शुरू करता है। ऐसा नहीं होगा अगर इसे पहले var के साथ घोषित किया गया था।
यदि आपका कोड एक ही स्क्रिप्ट टैग में था, तो यह त्रुटि नहीं होगी। इसके अलावा, अगर हिया की पहली घोषणा var के साथ की गई थी, तो यह त्रुटि भी नहीं होगी।
विशेष रूप से, आपके दूसरे स्क्रिप्ट टैग में, आईई पहले var स्टेटमेंट्स की तलाश करता है, यह एक var var hiya = 1
पाता है; फिर यह कहता है, हिया को पहले एक विविध बयानों के साथ शुरू नहीं किया गया था (आईई गूंगा है, अन्य ब्राउज़र पहचानते हैं कि खिड़की .hiya वही काम करता है) और किसी भी कोड को निष्पादित करने से पहले hiya, overwriting window.hiya को शुरू करता है।
संभावित समाधान:
- एक ही स्क्रिप्ट टैग के अंतर्गत अपने कोड रखें
- window.hiYa
- साथ चर प्रारंभ न करें आप लिपियों में से एक पर नियंत्रण नहीं है, तो यह सुनिश्चित कर लें स्क्रिप्ट का उपयोग करता है जो स्क्रिप्ट का उपयोग करता है
अंतिम नोट यह स्पष्ट करने के लिए कि जेएस पार्सर्स आपके कोड में क्या करते हैं।
<html>
<body>
<script type="text/javascript">
window.hiya = 'hiya';
</script>
<script type="text/javascript">
// IE is dumb, it doesn't recognize that hiya is already
// defined as window.hiya, so it's initialized to undefined here
var hiya;
if(false) {
hiya = 1;
}
document.write("typeof(hiya) = "+ typeof(hiya));
</script>
</body>
</html>
तो अगर आप एक स्क्रिप्ट टैग में सब कुछ डाल दिया, यह क्या कोड होगा (के बाद जे एस इंजन के लिए वर बयान ले जाया गया है: जे एस पार्सर अपने कोड को देखता है, तो यह निम्नलिखित में परिवर्तित हो शीर्ष), ताकि आप देख सकें कि आईई इसे गड़बड़ कर सकता है, क्योंकि आपके window.hiya
असाइनमेंट शीर्ष पर स्थानांतरित होने वाले var के बाद होगा।
<html>
<body>
<script type="text/javascript">
var hiya;
window.hiya = 'hiya';
if(false) {
hiya = 1;
}
document.write("typeof(hiya) = "+ typeof(hiya));
</script>
</body>
</html>
पहली जगह ऐसी मुश्किल चीजें क्यों नहीं लिख रहे हैं? ;) – delnan
हां। असली दुनिया की समस्या जो मैं कर रहा था वह बहुत जटिल था, जहां एक सशर्त था जो किसी अन्य पुस्तकालय को लोड नहीं होने पर कुछ परिभाषित करेगा। यह कुछ है जो मैं चारों ओर काम कर सकता हूं, लेकिन मैं वास्तव में समझना चाहता हूं कि ऐसा क्यों होता है। – etoleb
@ डेलनान: स्नारकी, हुह? मैंने सोचा कि यह बहुत स्पष्ट था कि यह वास्तविक कोड नहीं था, यह केवल एक कमी है जो समस्या को दिखाती है। सभी ओपी की तरह एक प्रश्न पोस्ट करने से पहले करना चाहिए। –