Маъзулоти функсия дар JavaScript аз куҷо меояд?
sobes.tech AI
Ҷавоб аз AI
Маҳз дар лаҳзаи даъвати функсия, наҳзати иҷрои (ё this) дар JavaScript муайян мешавад, на дар лаҳзаи эълон. Ин омилҳо ба арзиши он таъсир мерасонанд:
-
Маҳз дар контексти умумӣ: Дар хориҷ аз функсияҳо,
thisба объектии глобалӣ ишора мекунад (дар браузерwindow, дар Node.jsglobal). Дар режими қатъӣ ('use strict')thisдар ин ҳолатundefinedхоҳад буд.// Дар браузер console.log(this); // window // Дар Node.js console.log(this); // global -
Завқи методи объект: Агар функсия ҳамчун методи объект (бо истифода аз нуқта) даъват шавад,
thisба он объект ишора мекунад.const obj = { name: 'Obj', method: function() { console.log(this.name); } }; obj.method(); // Obj -
Завқи оддӣ (функсияи оддӣ): Дар даъвати одии функсия (на ҳамчун метод),
thisдар режими ғайри қатъӣ ба объектии глобалӣ ишора мекунад. Дар режими қатъӣ,thisundefinedхоҳад буд.function greet() { console.log(this); } greet(); // window (дар режими ғайри қатъӣ) ё undefined (дар режими қатъӣ) -
Конструктор (
new): Вақте ки функсия бо калимаи калидииnewдаъват мешавад, он ҳамчун конструктор амал мекунад.thisдар дохили функсия ба объекти нав, ки ҳоло сохта шудааст, ишора мекунад.function Person(name) { this.name = name; } const person1 = new Person('Alice'); console.log(person1.name); // Alice -
Методҳои
call,apply,bind: Ин методҳо ба таври равшан имкон медиҳанд, ки арзишиthis-ро барои функсия муайян кунед.callваapplyфунксияро фавран даъват мекунанд, боthisҳамчун аргументи аввал.callбоқимондаи аргументҳоро ба таври ҷудогона мегирад,apply– ҳамчун массив.bindфунксияи навро бармегардонад, ки арзишиthisдар он ҳамеша ба аргументи аввал баста шудааст.
const anotherObj = { name: 'Another Obj' }; function displayContext() { console.log(this.name); } displayContext.call(anotherObj); // Another Obj displayContext.apply(anotherObj); // Another Obj const boundFunction = displayContext.bind(anotherObj); boundFunction(); // Another Obj -
Функсияҳои стрелка: Функсияҳои стрелка
this-и худро надоранд. Онҳо арзишиthis-ро аз муҳити лексикалӣ, ки дар он эълон шудаанд, мегиранд. Ин онҳоро барои callback-ҳо дар дохили методҳо ё ҳангоми кор бо ҳодисаҳои DOM муфид месозад.const objWithArrow = { name: 'Arrow Obj', method() { const arrowFunc = () => { console.log(this.name); // `this` аз `method` (objWithArrow) гирифта мешавад }; arrowFunc(); } }; objWithArrow.method(); // Arrow Obj // Бо функсияи оддӣ муқоиса кунед const objWithRegular = { name: 'Regular Obj', method() { const regularFunc = function() { console.log(this); // `this` хоҳад буд window ё undefined (ба вобаста аз режим) дар вақти даъват }; regularFunc(); } }; objWithRegular.method(); // window (ё undefined)
Таъйини контекст — яке аз хусусиятҳои калидии JavaScript, ва фаҳмидани ин қоидаҳо барои кор бо функсияҳо ва объектҳо муҳим аст.