जावास्क्रिप्ट ES6 निर्यात कास्ट बनाम निर्यात चलो


149

मान लीजिए कि मेरे पास एक चर है जिसे मैं निर्यात करना चाहता हूं। के बीच क्या अंतर है

export const a = 1;

बनाम

export let a = 1;

मैं constऔर के बीच का अंतर समझता हूं let, लेकिन जब आप उन्हें निर्यात करते हैं, तो अंतर क्या हैं?


exportयहां कीवर्ड विवरण । वर्तमान में यह किसी भी वेब-ब्राउज़र द्वारा मूल रूप से समर्थित नहीं है।
आरबीटी

जवाबों:


247

ES6 में, imports निर्यात-मूल्यों पर लाइव केवल-पढ़ने के विचार हैं। परिणामस्वरूप, जब आप ऐसा करते हैं import a from "somemodule";, तो aआप aमॉड्यूल में किसी भी तरह की घोषणा नहीं कर सकते ।

हालाँकि, चूंकि आयातित चर लाइव दृश्य हैं, इसलिए वे निर्यात में "कच्चे" निर्यात चर के अनुसार बदलते हैं। निम्नलिखित कोड पर विचार करें (नीचे संदर्भ लेख से उधार लिया गया है):

//------ lib.js ------
export let counter = 3;
export function incCounter() {
    counter++;
}

//------ main1.js ------
import { counter, incCounter } from './lib';

// The imported value `counter` is live
console.log(counter); // 3
incCounter();
console.log(counter); // 4

// The imported value can’t be changed
counter++; // TypeError

जैसा कि आप देख सकते हैं, अंतर वास्तव में निहित है lib.js, नहीं main1.js


संक्षेप में:

  • आप importमॉड्यूल में संबंधित चर घोषित करने से कोई फर्क नहीं पड़ता, आप -ed चर को असाइन नहीं कर सकते ।
  • पारंपरिक let-vs- constशब्दार्थ मॉड्यूल में घोषित चर पर लागू होता है।
    • यदि चर घोषित किया जाता है const , तो इसे कहीं भी पुन: असाइन या रिबाउंड नहीं किया जा सकता है।
    • यदि चर घोषित किया जाता है let, तो इसे केवल मॉड्यूल में पुन: असाइन किया जा सकता है (लेकिन उपयोगकर्ता नहीं)। यदि इसे बदल दिया जाता है, तो import-ed चर इसके अनुसार बदल जाता है।

संदर्भ: http://exploringjs.com/es6/ch_modules.html#leanpub-auto-in-es6-imports-are-live-read-only-views-on-exported-values


2

मुझे लगता है कि एक बार जब आप इसे आयात कर लेते हैं, तो व्यवहार समान होता है (उस स्थान पर जहां आपके चर का उपयोग स्रोत फ़ाइल के बाहर किया जाएगा)।

फर्क सिर्फ इतना होगा कि आप इस फाइल के अंत से पहले इसे फिर से असाइन करने की कोशिश करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.