Sobes.tech
Junior

Ką išves į konsolę, jei naudosite this console.log?

sobes.tech AI

Atsakymas iš AI

Priklausomai nuo console.log iškvietimo konteksto ir griežto režimo JavaScript ("use strict").

Pagrindiniame kontekste (už funkcijų ir modulių ribų):

  • Nestriktiniame režime ("use strict" nėra arba deklaruotas funkcijoje): this nuoroda į globalųjį objektą (window naršyklėje, global Node.js).
  • Griežtame režime: this bus undefined.

Funkcijos viduje:

  • Nestriktiniame režime: this nuoroda į globalųjį objektą, jei funkcija kviečiama kaip paprasta funkcija (myFunction()). Jei funkcija kviečiama kaip objekto metodas (myObject.myMethod()), this nuoroda į objektą (myObject). Jei funkcija naudojama kaip konstruktorius (new MyClass()), this nuoroda į naują objekto egzempliorių.
  • Griežtame režime: this bus undefined, jei funkcija kviečiama kaip paprasta funkcija. Kitais atvejais (objekto metodas, konstruktorius) elgsis kaip nestriktiniame režime.

Rodyklės funkcijos (=>) viduje:

  • this leksiškai paveldima iš aplinkos. Tai reiškia, kad this reikšmė rodyklės funkcijos viduje bus tokia pati kaip ir išorės įprastos funkcijos ar globalaus konteksto, kur ji buvo deklaruota, nepriklausomai nuo kvietimo būdo. Rodyklės funkcijos nesusieja this su savo pačių kvietimo kontekstu.

Pavyzdys:

// Globalus kontekstas
console.log(this); // Naršyklėje: Window, Node.js: global (nestriktinis režimas)
                    // Naršyklėje: undefined, Node.js: undefined (griežtas režimas)

// Paprasta funkcija
function showThisNonStrict() {
  console.log(this);
}

showThisNonStrict(); // Naršyklėje: Window, Node.js: global

function showThisStrict() {
  "use strict";
  console.log(this);
}

showThisStrict(); // undefined

const myObject = {
  methodNonStrict: function() {
    console.log(this);
  },
  methodStrict: function() {
    "use strict";
    console.log(this);
  }
};

myObject.methodNonStrict(); // myObject
myObject.methodStrict();   // myObject

// Rodyklės funkcija
const arrowFunc = () => {
  console.log(this);
};

arrowFunc(); // Naršyklėje: Window, Node.js: global (paveldi iš išorės konteksto)

const myObjectWithArrow = {
  arrowMethod: () => {
    console.log(this);
  }
};

myObjectWithArrow.arrowMethod(); // Naršyklėje: Window, Node.js: global (paveldi iš deklaracijos konteksto)