फ़ायरफ़ॉक्स फ़ंक्शन स्टेटमेंट को अलग-अलग व्याख्या करता है और स्पष्ट रूप से उन्होंने फ़ंक्शन घोषणा के लिए घोषणापत्र को तोड़ दिया। (A good read about named functions/declaration vs expression)
क्यों फ़ायरफ़ॉक्स बयान की व्याख्या करता है अलग ढंग से निम्न कोड की वजह से है:
if (true) {
function test(){alert("YAY");}
} else {
function test(){alert("FAIL");}
}
test(); // should alert FAIL
घोषणा उत्थापन के कारण, समारोह test
चाहिए हमेशा सतर्क "असफल", लेकिन नहीं फ़ायरफ़ॉक्स में। उपर्युक्त कोड वास्तव में फ़ायरफ़ॉक्स में "यय" को अलर्ट करता है और मुझे उस कोड पर संदेह है जो अंततः घोषणापत्र को पूरी तरह से तोड़ देता है।
मुझे लगता है कि फ़ायरफ़ॉक्स विभिन्न घोषणाओं में फ़ंक्शन घोषणाएं बदलता है जब वे/अन्य में स्थित होते हैं या कथन/प्रयास करते हैं। इसलिए जैसा:
// firefox interpretted code
var test; // hoisted
if (true) {
test = function(){alert("yay")}
} else {
test = function(){alert("fail")}
}
Šime Vidas के साथ एक संक्षिप्त बहस के बाद, मैं कहना है कि समारोह घोषणाओं के साथ Firefox के व्यवहार की वजह से, गैर मानक है:
The production SourceElement : Statement is processed for function declarations by taking no action.
The production SourceElement : Statement is evaluated as follows:
- Evaluate Statement.
- Return Result(1).
दोनों FunctionDeclaration और वक्तव्य SourceElements कर रहे हैं, ergo, एक बयान के अंदर कोई समारोह घोषणा नहीं होनी चाहिए (अगर/अन्य, कोशिश/पकड़)। Šime Vidas एक brownie दे दो!
कोशिश/पकड़ मूल रूप से अन्य रूपों का एक और रूप है और शायद उसी अपवाद कोड का उपयोग करता है।
यह ब्राउज़र किस में है? –
सहमत; यह काम नहीं करता (फ़ायरफ़ॉक्स), लेकिन सवाल मैं पूछूंगा कि आपको इसकी आवश्यकता क्यों है? कोशिश/पकड़ ब्लॉक के अंदर आपको फ़ंक्शन घोषणाएं क्यों करने की आवश्यकता है? – Spudley
फ़ायरफ़ॉक्स। अब मैं देखता हूं कि आईई और क्रोम दोनों हेलो दुनिया को प्रदर्शित करते हैं ... –