ES6: Var, Let ja Const erinevus näidetega

Selles artiklis käsitletakse var, let and const nende ulatuse ja tõstmise osas.

Var:

Var-lause kuulutab muutuja. Muutujad on konteinerid igasuguse teabe salvestamiseks.

Reguleerimisala:

Var-ga deklareeritud muutuja ulatus on selle praegune täitmiskontekst, mis on kas ümbritsev funktsioon või väljaspool funktsiooni deklareeritud muutujate puhul globaalne.

muutujaid saab uuesti deklareerida ja uuendada.
funktsioon x () {
  y = 1;
  var z = 2;
}

x ();

console.log (y); // 1, kuna y on deklareerimata muutuja, mis on alati globaalne.
console.log (z); // viskab viitevea: z ei ole määratletud väljaspool x, kuna z on täitmiskontekstis, milles see deklareeritakse, piiratud

Ülaltoodud funktsiooni korral y = 1 on lihtsalt vara loovutamine. Kõigepealt üritatakse y lahendada ulatuse ahela alusel. Kui ta leiab selle ulatuse ahela kuskilt, täidab ta ülesande; kui ta ei leia y-d, loob ta siis atribuudi y globaalsel objektil (mis on ulatuse ahela ülataseme objekt).

Soovitatav on alati deklareerida muutujad, sõltumata sellest, kas nad on funktsioonis või globaalses ulatuses.

Tõstmine:

Tõstmine on JavaScripti mehhanism, kus muutujad ja funktsioonide deklaratsioonid viiakse enne koodi täitmist oma ulatuse tippu. See tähendab:

console.log (myName);
var myName = 'xyz';

Kui Javascript kompileeritakse, liigub var myName oma ulatuse tippu. Kuid peamine asi, mida tuleb märkida, on see

ainus asi, mis liigutatakse tippu, on muutuja deklaratsioonid, mitte muutujale antud tegelik väärtus.

Seetõttu on console.log võimeline väljastama sõna "määratlemata", kuna see tunnistab, et muutuja myName on olemas, kuid myName'ile on antud väärtus alles kolmandal real.

var myName;
console.log (myName); // Määratlemata
myName = 'xyz';

Laskma:

lase võimaldab deklareerida muutujaid, mille ulatus on piiratud ploki, avalduse või avaldisega, millel seda kasutatakse. Erinevalt var-märksõnast, mis määratleb muutuja globaalselt või lokaalselt kogu funktsiooniks, olenemata ploki ulatusest.

Reguleerimisala:

lasta on blokeerida ulatus. Seda saab ajakohastada, kuid mitte samas mahus uuesti deklareerida.
if (true) {
  las foo = "abc";
  lase foo; // SyntaxError visatud. Taasdeklareerimine pole lubatud.
}
-------------------------------------------------- -------
if (true) {
  las foo = "abc";
}
console.log (foo); // ReferenceError: foo ei ole määratletud.foo on blokeeritud
-------------------------------------------------- -------
las foo = "abc";
if (true) {
  las foo = "xyz";
}
console.log (foo); // abc. Muutujad on deklareeritud erineva ulatusega

Tõstmine:

Nii nagu var, tõstetakse deklaratsioonid üles. Erinevalt var-st, mis on lähtestatud määratlemata, pole algne märksõna lähtestatud. Nii et kui proovite enne deklareerimist kasutada muutujat let, saate viitevea.

if (true) {
    console.log (myName);
    let myName = 'abc'; // viiteviga
}

Const:

Märksõna const ei võimalda muutuja nime oma koodi kuskil kasutada.

Reguleerimisala:

Const deklaratsioonid on blokeeritavad. Seda ei saa uuendada ega uuesti deklareerida. See tuleb lähtestada deklareerimise ajal.
if (true) {
  const foo = "abc";
  foo = "xyz"; // Püsimuutujale omistamine. Ei saa värskendada
}
-------------------------------------------------- -------
if (true) {
  const foo = "abc";
}
console.log (foo); // ReferenceError: foo ei ole määratletud.foo on blokeeritud
-------------------------------------------------- -------
const foo = "abc";
if (true) {
   const foo = "xyz";
}
console.log (foo); // abc. Muutujad on deklareeritud erineva ulatusega

Märkus. Ehkki const-objekti ei saa värskendada, saab selle objekti atribuute värskendada.

Tõstmine:

Nagu lasta, tõstetakse ka deklaratsioonid üles, kuid neid ei lähtestata. Siin kuulutatakse const-märksõna ulatuse ülaosas, kuid seda ei lähtestata määratlemata.

if (true) {
    console.log (myName);
    const myName = 'abc'; // viiteviga
}

Palun jätke oma kommentaarid.

Tutvuge sarjaga:

  • Ulatus ja täitmise taust Javascriptis
  • Tõstmine Demystified populaarsete intervjuuküsimustega
  • Javascripti sulgemine

Palun saatke tagasisidet, küsimusi või teemade taotlusi.Kui sellest postitusest oli abi, klõpsake oma toetuse kuvamiseks mõni kord alloleval nupul lap.

Allikad: