Middle
JavaScriptтеги функциялардын контекстин айтып бер.
sobes.tech AI
AIден жооп
JavaScriptте функциянын аткаруу контексти (this) аныктайт, ал функцияны кандайча чакырганды жана анын ичинде кандай маанилер жеткиликтүү экенин аныктайт. Контекст динамикалык түрдө чакырылыштын ыкмасына жараша өзгөрөт:
- Глобалдык контекст: Функциялардан тышкары,
thisглобалдык обьекке шилтеме кылат (windowбраузерде,globalNode.jsте).// Браузерде console.log(this === window); // true // Node.jsте console.log(this === global); // true - Функциянын контексти:
- Стандарттык чакыруу: Не-строг режимде
thisглобалдык обьекке шилтеме кылат (эгер функция обьекттин методу эмес болсо). Строг режимде ("use strict";)thisundefinedболот.function showThis() { console.log(this); } showThis(); // Не-строг режимде: Глобалдык обьек; Строг режимде: `undefined` - Обьекттин методу катары чакыруу:
thisметодуна кирген обьекеге шилтеме кылат:
const user = { name: 'Alice', greet: function() { console.log("Hello, my name is " + this.name); } }; user.greet(); // Hello, my name is Alice newменен чакыруу (конструктор):- Жаңы обьект түзөт, ал
thisмааниси болот жана ошол обьект кайтарылат:
function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob- Жаңы обьект түзөт, ал
- Ачык контекст көрсөтүү (
call,apply,bind):call(thisArg, arg1, arg2, ...): Функцияны белгилүүthisменен жана жеке аргументтер менен чакырат:apply(thisArg, [argsArray]): Функцияны белгилүүthisменен жана массив түрүндөгү аргументтер менен чакырат:bind(thisArg, arg1, arg2, ...): Жаңы функцияны кайтарат, анынthisылдамдык мененthisArgке байланган жана аргументтер:
function introduce(greeting, punctuation) { console.log(greeting + ", I am " + this.name + punctuation); } const person = { name: 'Charlie' }; introduce.call(person, "Hi", "!"); // Hi, I am Charlie! introduce.apply(person, ["Hello", "."]); // Hello, I am Charlie. const boundIntroduce = introduce.bind(person, "Hey"); boundIntroduce("?"); // Hey, I am Charlie?
- Стандарттык чакыруу: Не-строг режимде
- Arrow функциялар: Өзүнүн
thisмааниси жок. Алар аны сырттагы лексикалык чөйрөдөн алат:const obj = { name: 'David', sayLater: function() { // `this` бул жерде `obj`ке шилтеме кылат setTimeout(() => { // `this` бул жерде дагы `obj`ке шилтеме кылат (`sayLater`тен мурас) console.log("Later, I am " + this.name); }, 1000); } }; obj.sayLater(); // Later, I am David