मैं बस जब एक ब्लॉक दायरे में एक समारोह को परिभाषित करने के लिए एक समस्या हुई थी। निम्नलिखित कार्यक्रम पर विचार करें:समारोह घोषणा या समारोह अभिव्यक्ति
try {
greet();
function greet() {
alert("Merry Christmas!");
}
} catch (error) {
alert(error);
}
मैं इस कार्यक्रम की उम्मीद Merry Christmas!
सचेत करने के लिए। हालांकि में फ़ायरफ़ॉक्स है मुझे देता है निम्नलिखित ReferenceError
:
ReferenceError: greet is not defined
ओपेरा और क्रोम पर यह ग्रीटिंग अलर्ट के रूप में मैं इसे करने की उम्मीद।
स्पष्ट रूप से फ़ायरफ़ॉक्स ब्लॉक स्कोप के अंदर फ़ंक्शन को FunctionExpression
के रूप में मानता है जबकि ओपेरा और क्रोम इसे FunctionDeclaration
के रूप में मानते हैं।
मेरा प्रश्न क्यों फ़ायरफ़ॉक्स अलग तरीके से व्यवहार करता है? कौन सा कार्यान्वयन अधिक तार्किक है? मानक मानकों का कौन सा है?
मैं समझता हूँ कि जावास्क्रिप्ट में घोषणाओं फहराया जाता है और यदि ऐसा है तो एक ही समारोह में एक ही दायरे में दो या अधिक विभिन्न ब्लॉकों में घोषित किया जाता है तो एक नाम संघर्ष हो जाएगा।
हालांकि यह हो आप इस तरह कुछ करना नहीं होता और अधिक समारोह हर बार यह घोषणा की है redeclare करने के लिए तार्किक ताकि कर सकते हैं:
greet(); // Merry Christmas!
function greet() {
alert("Merry Christmas!");
}
greet(); // Happy New Year!
function greet() {
alert("Happy New Year!");
}
मैं ब्लॉक हल करने के लिए लगता है कि यह बहुत उपयोगी हो सकता है, इसके अलावा में ऊपर वर्णित समस्या स्कॉइंग समस्या।
"समारोह redeclare हर बार इतना है कि आप इस तरह से कुछ कर सकते हैं यह घोषित है" - वे * हैं * फिर से संदर्भित, केवल घोषणा एक बार होता है और यह फहराया है। क्या आपने पिछले पैराग्राफ में पुष्टि नहीं की है, कि आप उछाल को समझते हैं? – katspaugh
हाँ मैं जावास्क्रिप्ट में hoisting समझ में आता है। नहीं, मेरी सजा पूरी तरह स्पष्ट है। मैं क्या कहने की कोशिश कर रहा हूँ कि हर बार दुभाषिया एक 'FunctionDeclaration' सामना करना पड़ता है (_every समय यह declared_) यह केवल यह एक ही दायरे में समारोह के पिछले घोषणा तक फहराने चाहिए (function_ _redeclare) है। चूंकि यह सुविधा जावास्क्रिप्ट में मौजूद नहीं है, इसलिए आप वर्तमान जावास्क्रिप्ट मानकों का हवाला देते हुए इसे अमान्य नहीं कर सकते हैं। यह बस एक सुझाव है। जावास्क्रिप्ट में एक ही फ़ंक्शन की कई घोषणाओं को लागू करने के लिए एक सुझाव। उम्मीद है कि आपको कुछ स्पष्टता लाती है। मेरी क्रिसमस @ katspaugh –
ओह, मैं देखता हूँ। धन्यवाद भगवान यह ईएस बोर्ड पर किसी के लिए नहीं हुआ था। मेरी क्रिसमस, आदित! :) – katspaugh