Sobes.tech
Junior

console.log-da this istifadə etsəniz, konsolda nə göstəriləcək?

sobes.tech Süni İntellekt

AI-dan cavab

Ça, console.log çağırışının kontekstinə və JavaScript-in sərt rejiminə ("use strict") bağlıdır.

Qlobal kontekstdə (funksiyalardan və modullardan kənarda):

  • Sərt olmayan rejimdə ("use strict" yoxdur və ya funksiyada elan olunubsa): this qlobal obyektə istinad edir (window brauzerdə, global Node.js-də).
  • Sərt rejimdə: this undefined olacaq.

Funktion daxilində:

  • Sərt olmayan rejimdə: this normal funksiyanı çağırdıqda (myFunction()) qlobal obyektə istinad edir. Əgər funksiya obyektin metodu kimi çağırılırsa (myObject.myMethod()), this həmin obyektə istinad edir (myObject). Əgər funksiya konstruktor kimi istifadə olunursa (new MyClass()), this yeni obyekt nümunəsinə istinad edir.
  • Sərt rejimdə: this undefined olacaq, əgər funksiya sadə funksiya kimi çağırılırsa. Digər hallarda (obyekt metodu, konstruktor) davranış sərt olmayan rejimlə eynidir.

Ok funksiyası (=>) daxilində:

  • this leksikal olaraq ətraf mühitdən miras alınır. Bu, ok funksiyasının içindəki this-in, xarici normal funksiyada və ya qlobal kontekstdə, hansı kontekstdə elan olunubsa, eyni olacağı deməkdir, çağırılma formasından asılı olmayaraq. Ok funksiyaları this-i öz çağırış kontekstinə bağlamır.

Nümunə:

// Qlobal kontekst
console.log(this); // Brauzer: Window, Node.js: global (sərt olmayan rejim)
                    // Brauzer: undefined, Node.js: undefined (sərt rejim)

// Normal funksiya
function showThisNonStrict() {
  console.log(this);
}

showThisNonStrict(); // Brauzer: 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

// Ok funksiyası
const arrowFunc = () => {
  console.log(this);
};

arrowFunc(); // Brauzer: Window, Node.js: global (kontekstdən miras alır)

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

myObjectWithArrow.arrowMethod(); // Brauzer: Window, Node.js: global (kontekstdən miras alır)