2016-03-21 10 views
10

मैं अपने प्रोजेक्ट में कोलाहल के साथ ES6 उपयोग कर रहा हूँ और जब मैं अपने constब्राउज़र: पहचानकर्ता एक्स पहले से ही

'use strict'; 

const APP = window.APP = window.APP || {}; 
const _ = window._; 

APP.personalCard = (function() { 

    ... 

}()); 

त्रुटि में से एक घोषित मैं एक त्रुटि हो रही

Uncaught TypeError: Identifier 'APP' has already been declared

और कर रहा हूँ घोषित किया गया है वह पूरी फाइल है, मेरे पास उस फ़ाइल में कहीं और घोषित नहीं है। लेकिन मैंने अन्य फाइलों के शीर्ष में var घोषित कर दिया है।

आपको क्या लगता है कि यह होना चाहिए?

उत्तर

0

याद रखें कि window वैश्विक नामस्थान है।

window.APP = { ... } 
const APP = window.APP 

दूसरी परिभाषा strict मोड (आपकी फ़ाइल के शीर्ष पर 'use strict' के साथ सक्षम) में अनुमति नहीं है: इन दो पंक्तियों को एक ही चर घोषित करने के लिए प्रयास करते हैं।

समस्या को ठीक करने के लिए, बस const APP = घोषणा को हटा दें। वेरिएबल अभी भी सुलभ होगा, क्योंकि यह वैश्विक नामस्थान से संबंधित है।

+1

'window.APP =' एक असाइनमेंट है, घोषणा नहीं। परिवर्तनीय घोषित होने से पहले इसे निष्पादित भी नहीं किया जाता है। – Bergi

+1

यह काफी सख्ती से सच नहीं है। वास्तविक ईएस 6 पर्यावरण में विश्व स्तर पर स्कोप्ड लेट/कॉन्स घोषणाएं वैश्विक वस्तु में कोई संपत्ति नहीं जोड़ती हैं लेकिन वे वैश्विक-स्कोप्ड बाइंडिंग बनाते हैं। – loganfsmyth

7

But I have declared that var in the top of the other files.

यही समस्या है। आखिरकार, यह वही नाम (वैश्विक) दायरे में एक ही नाम के लिए कई घोषणाएं करता है - जो const के साथ एक त्रुटि फेंक देगा।

इसके बजाय, var का उपयोग करें, अपनी मुख्य फ़ाइल में केवल एक घोषणा का उपयोग करें, या केवल window.APP को असाइन करें।
या तुरंत ES6 मॉड्यूल का उपयोग करें, और अपने मॉड्यूल बंडलर/लोडर को उम्मीद के अनुसार उजागर करने दें।

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