Junior
Эгер сиз console.log ичинде this колдонсоңуз, консольдо эмне чыгат?
sobes.tech AI
AIден жооп
console.log-ту чакырган контекстке жана катуу режимдин ("use strict") жараша болот.
Глобалдык контекстте (функциялар жана модулдар сыртында):
- Нестриктүү режимде (
"use strict"жок же функцияда жарыяланган):thisглобалдык объектке шилтеме кылат (windowбраузерде,globalNode.js). - Катуу режимде:
thisundefinedболот.
Функциянын ичинде:
- Нестриктүү режимде:
thisглобалдык объектке шилтеме кылат, эгер функция жөнөкөй функция катары чакырылса (myFunction()). Эгер функция объекттин методу катары чакырылса (myObject.myMethod()),thisобъектке шилтеме кылат (myObject). Эгер функция конструктор катары колдонулса (new MyClass()),thisжаңы объектке шилтеме кылат. - Катуу режимде:
thisundefinedболот, эгер функция жөнөкөй функция катары чакырылса. Башка учурларда (объекттин методу, конструктор) жүрүм-турум ошол эле бойдон калат, какта нестриктүү режимде.
Стрелка функциясынын ичинде (=>):
thisлексикалык жактан сырттагы контексттен мурас алат. Демек, стрелка функциясынын ичиндеthisмааниси сырттагы жөнөкөй функция же глобалдык контекстте кандай болсо, ошондой болот, чакыруу жолу кандай болбосун. Стрелка функцияларыthis-ти өзүнүн чакыруу контекстине байламайт.
Мисал:
// Глобалдык контекст
console.log(this); // Браузерде: Window, Node.js: global (нестриктүү режим)
// Браузерде: undefined, Node.js: undefined (катуу режим)
// Жөнөкөй функция
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // Браузерде: 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
// Стрелка функциясы
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // Браузерде: Window, Node.js: global (сырткы контексттен мурас)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // Браузерде: Window, Node.js: global (жарыяланган контексттен мурас)