मैं आशा करती हूं किसी ने मुझे समझाने क्यों जावास्क्रिप्ट नीचे/HTML दिखाएगा "दरवाजा # 2" जब HTML एक ब्राउज़र में देखा जाता है कर सकते हैं:एक JavaScript मान संदर्भित होने से पहले ही घोषित किया जाता है - किसी को समझा सकता है इस
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
function testprint() {
alert('door #1');
};
window.onload = testprint;
function testprint() {
alert('door #2');
};
testprint = function() {
alert('door #3');
};
</script>
<script type="text/javascript">
function testprint() {
alert('door #4');
};
</script>
</head>
<body>
</body>
</html>
के बाद से केवल window.onload
से पहले घोषणा testprint
होता testprint
के लिए सेट है, मैं window.onload
कारण '# 1 दरवाजा' दिखाने के लिए उम्मीद करेंगे। असल में, अधिभार 'दरवाजा # 2' का कारण बनता है। ध्यान दें कि यह ऐसा करेगा कि testprint
की पहली घोषणा शामिल है या नहीं।
testprint
के तीसरे और चौथे घोषणा समारोह बताए के विभिन्न साधनों का उपयोग करें, मैं इस कोशिश की है, तो यह एक ही में window.onload
के व्यवहार को ओवरराइड देखने के लिए की testprint
करता है दूसरा घोषणा थी। यह नहीं था। ध्यान दें कि यदि मैं पहली स्क्रिप्ट ब्लॉक के अंत में testprint
की चौथी घोषणा को स्थानांतरित करता हूं तो इसे window.onload
द्वारा बुलाया जाएगा।
होस्टिंग कार्य करने के लिए एक सूक्ष्मता है जहां [ब्राउज़र असहमत] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope#Conditional_defining_a_function)। _SpiderMonkey_ ** ** सशर्त दायरे में घोषित किए गए कार्यों को नहीं बढ़ाएगा जबकि _V8_ (लेखन के समय) ऐसा करता है। –