Junior
Агар шумо дар console.log истифода баред this, чӣ дар консоль нишон дода мешавад?
sobes.tech AI
Ҷавоб аз AI
console.log-ի կանչի կոնտեքստից և JavaScript-ի խստության ռեժիմից ("use strict") կախված է։
Գլոբալ կոնտեքստում (ֆունկցիաներից և մոդուլներից դուրս).
- Ներքին ռեժիմում (
"use strict"բացակայում է կամ հայտարարված է ֆունկցիայի մեջ).this-ը կվերաբերի գլոբալ օբյեկտին (windowբրաուզերում,globalNode.js-ում): - Խստիվ ռեժիմում.
this-ը կլինիundefined։
Ֆունկցիայի ներսում:
- Ներքին ռեժիմում.
this-ը կվերաբերի գլոբալ օբյեկտին, եթե ֆունկցիան կանչվի որպես սովորական ֆունկցիա (myFunction()). Եթե ֆունկցիան կանչվի որպես օբյեկտի մեթոդ (myObject.myMethod()),this-ը կվերաբերի օբյեկտին (myObject). Եթե ֆունկցիան օգտագործվի որպես կոնստրուկտոր (new MyClass()),this-ը կվերաբերի նոր օբյեկտի օրինակին։ - Խստիվ ռեժիմում.
this-ը կլինիundefined, եթե ֆունկցիան կանչվի որպես սովորական ֆունկցիա։ Մյուս դեպքերում (օբյեկտի մեթոդ, կոնստրուկտոր) վարքագիծը նույնն է, ինչ նեղ ռեժիմում։
Ստրելային ֆունկցիայի ներսում (=>):
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 (ժառանգում է հայտարարության կոնտեքստից)