2017-01-17 20 views
6

मैं एक क्रोम में यह लिखा स्निपेट:स्निपेट्स - पहचानकर्ता पहले से ही घोषित किया गया है

let commitPromotionData = (product) => new Promise((resolve, reject) => { 
    //Do something with the server 
    var statusCode = 200; 

    statusCode == 200 ? resolve(product) : reject(); 
}); 

और जब मैं इसे 2 बार चलाने का प्रयास है, यह पहले से ही चर घोषित किया गया है कहते हैं और पहली पंक्ति में एक त्रुटि फेंकता ।

त्रुटि है:

Uncaught SyntaxError: Identifier 'commitPromotionData' has already been declared at :1:1

और निश्चित रूप से, इस कंसोल के लिए डिफ़ॉल्ट व्यवहार होता है, लेकिन यह बहुत भावना यहाँ बनाने के लिए नहीं लगता है ..

इस इरादा है? क्या इसके आसपास कोई रास्ता है?

+0

सिर्फ अपने कोड के अंदर '(function() {अपने कोड //})() रखा है, में एक [ब्लॉक कोड लपेटकर द्वारा' – harry123

उत्तर

6

मेरा मानना ​​है कि आप तथ्य यह है कि एक let बयान केवल किसी भी क्षेत्र में एक बार एक चर बनाने के लिए इस्तेमाल किया जा सकता में चला रहे हैं। अपने उदाहरण में, आप क्रोम के टुकड़े का उपयोग कर रहे हैं, अगर आप उत्पादन window.commitPromotionData सही let बयान के बाद आप देखेंगे कि यह वहाँ है, भले ही। यही कारण है कि गुंजाइश अपने let बयान चर को असाइन कर रहा है। दस्तावेज here के रूप में फिर से चल रहा है एक ही टुकड़ा अनिवार्य रूप से सिंटेक्स त्रुटि में खिड़की और परिणामों के भीतर एक ही चर बनाने के लिए कोशिश करता है।

  1. जाहिर है पहले कोड लपेटकर के लिए कोई भी शीर्ष स्तर var के
  2. को let बयान परिवर्तित या एक नए ब्लॉक गुंजाइश बनाने के लिए है:

    आप दो तरीके दिए है। यह आईआईएफई (function(){ ... code ... })()

+3

यह उदाहरण के लिए किया जा सकता है बयान] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block#Block_Scoping_Rules) '{... कोड ...}' – yckart

3

में कोड को लपेटकर उदाहरण के लिए किया जा सकता है त्रुटि यह है कि आपने दायरे में दो बार चर घोषित किया है।

आप को फिर से लोड या तो आप नए गुंजाइश हो, त्रुटि गायब हो जाएगा पेज को ताज़ा कर सकते हैं।

0

आज्ञा देना ES6 आगे बढ़ने

;(() => { 
    console.log('local scope') 
}() 
संबंधित मुद्दे