2016-10-28 14 views
8

मैं अपने जावास्क्रिप्ट कोड को नए ES6 मानक में "अपडेट" करना चाहता था, इसलिए मैंने देखा कि फ़ंक्शंस अब कैसे लिखे गए हैं और इसे मेरे वैश्विक कार्य पर कैसे आज़माया गया है, जो "पुराने" es5ES6 में कोई फ़ंक्शन घोषित करना?

में इस तरह पढ़ता है
function logMessage(message) { 
document.getElementById("logs").innerHTML = document.getElementById("logs").innerHTML + `<li class="item-padding"> ${message} </li>` 
} 

अब अगर मैं गलत सही "परिवर्तन" ES6 इस तरह होगा नहीं कर रहा हूँ:

logMessage = message => { 
    etc 
} 

लेकिन मेरे ESLint मुझसे कहता है कि मेरी logMessage परिभाषित नहीं है और मैं अपने कंसोल में कोई त्रुटि मिलती है, क्या मुझे कुछ याद आती है? क्या मुझे लॉग मैसेज से पहले var, let या const घोषित करना है?

मुझे नहीं पता कि यह महत्वपूर्ण है, लेकिन मैं इस फ़ंक्शन को फ़ाइल से फ़ाइल में निर्यात करना चाहता हूं दो फ़ाइल में और फ़ंक्शन लॉग का उपयोग करें फ़ाइल में किसी अन्य फ़ंक्शन में संदेश दो, क्या ऐसा कुछ है जो मुझे ध्यान में रखना है इसलिए?

किसी भी मदद के लिए धन्यवाद!

संपादित करें: धन्यवाद हर किसी के जवाब ने मुझे बहुत मदद की, मेरी समस्या ठीक हो गई!

+1

मुझे नहीं लगता कि दो बिल्कुल एक जैसे हैं: पहला एक समारोह घोषणा है, दूसरा एक समारोह अभिव्यक्ति एक चर –

+0

संबंधित करने के लिए सौंपा है: [तीर समारोह बनाम समारोह घोषणा/भाव: वे बराबर हैं/विनिमय योग्य?] (http://stackoverflow.com/q/34361379/218196) –

उत्तर

13

अब अगर मैं गलत सही ES6 करने के लिए "परिवर्तन" इस

आप गलत हो जैसा होगा नहीं हूँ।

Arrow functionsविभिन्न व्यवहार के साथ एक नया वाक्यविन्यास है। वे फ़ंक्शन घोषणाओं और फ़ंक्शन एक्सप्रेशन (दोनों जिनमें से अभी भी ईएस 6 में मौजूद हैं) के लिए सीधे प्रतिस्थापन हैं।

लेकिन मेरा ईएसलिंट मुझे बताता है कि मेरा लॉग मैसेज परिभाषित नहीं है और मुझे अपने कंसोल में कोई त्रुटि मिलती है, क्या मुझे कुछ याद आती है? क्या मुझे लॉग मैसेज से पहले var, let या const घोषित करना है?

हां। आप एक चर के लिए कुछ असाइन कर रहे हैं। You must declare the variable first

मैं भी दो

दायर करने के लिए आप समारोह में निर्यात करने की क्षमता पर कोई प्रभाव नहीं कैसे परिभाषित फ़ाइल एक से इस समारोह निर्यात करना चाहते हैं।

+1

मुझे लगा कि मेरा 'उत्तर' एक उदाहरण था, जो आपके उत्तर को बेहतर बनाता है: 'const logMessage = (message) => {// कोड } 'करेंगे। – Roberrrt

+1

() एक साधारण तर्क –

+1

@ जारोमांडाएक्स के साथ वैकल्पिक हैं, हालांकि मैं इसे पढ़ने योग्यता के लिए इन मामलों में उपयोग करना पसंद करता हूं। (एसई (:!) – Roberrrt

10
function logMessage(message) { 
    // etc... 
} 

... कार्य घोषणा है जो अभी भी es6 में पूरी तरह मान्य है। आप एक समारोह अभिव्यक्ति है, जो es5 में इस प्रकार दिखाई देगा में अपने समारोह घोषणा परिवर्तित कर रहे हैं ...

logMessage = function(message) { 
    // etc... 
} 

... और फिर ES6 में ...

logMessage = message => { 
    // etc 
} 

... इसलिए लिनिंग समस्या es6 वाक्यविन्यास द्वारा पेश नहीं की गई है, बल्कि फ़ंक्शन अभिव्यक्ति का उपयोग करके, एक वेरिएबल को असाइन करना जो var/let/const के बिना वैश्विक चर है। मूल फ़ंक्शन घोषणा में भी अंतर होता है, लेकिन फ़ंक्शन अभिव्यक्ति फ़ॉर्म को इसे कॉल करने से पहले घोषित किया जाना चाहिए।उस ईएस 6 तीर कार्यों में भी एक अंतर है जो इसके दायरे के दायरे से संदर्भ को बरकरार रखता है, इसलिए ध्यान देने योग्य है कि वे एक दूसरे के 1 मैपिंग के लिए 100% प्रत्यक्ष 1 नहीं हैं।

संक्षिप्त उत्तर, हां, वैरिएबल को वैश्विक चर बनने से बचने के लिए/let/const के साथ घोषित करने की आवश्यकता है, चाहे वह कोई फ़ंक्शन हो या नहीं।

let logMessage = message => { 
    // etc 
} 
+1

पर खराब रंग कोडिंग क्या आप फ़ंक्शन घोषित करते समय 'चलो' पर 'चलो' का उपयोग करके विस्तृत कर सकते हैं? मैं कहूंगा कि एक फ़ंक्शन अपरिवर्तनीय सही होना चाहिए? – Roberrrt

+2

@Roberrrt एक बार घोषित एक फ़ंक्शन को अभी भी छेड़छाड़ की जा सकती है, तो यह _mutable_ है। यह एक वस्तु है, आखिरकार। 'कॉन्स्ट' कीवर्ड सिर्फ इसे फिर से सौंपने से रोकता है। मुझे नहीं लगता कि बिली चंद्रमा' चोटी 'पर' वकालत 'कर रहा था, यह सिर्फ घोषणा कीवर्ड वह उपयोग करने के लिए हुआ, इसलिए यह "इस तरह से आपको ऐसा करने का तरीका है" के बजाय चित्रकारी उद्देश्यों के लिए है। – vlaz

+1

@vlaz मैं अपने आप को 'const'' का उपयोग कर रहा हूं, और अब तक इसके साथ कोई समस्या नहीं आई है , लेकिन संभवत: 'लेट' को असाइन करते समय कुछ जादू संभव था, हालांकि जानकारी के लिए बहुत धन्यवाद! – Roberrrt

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