Junior
JavaScript-ში კლასიკური ფუნქცია და სლაკის ფუნქცია რა განსხვავებაა?
sobes.tech AI
პასუხი AI-სგან
ძირითადი განსხვავება იმაშია, თუ როგორ მუშაობენ this-თან:
კლასიკური ფუნქცია აქვს თავისი this, რომელიც განსაზღვრულია მისი გამოძახების კონტექსტით (როგორ გამოიძახა).
სწრაფი ფუნქცია არ აქვს თავისი this. ის ლექსიკურად მემკვიდრეობით იღებს this იმ გარემოდან, სადაც იქნა განსაზღვრული.
სხვა განსხვავებები:
argumentsობიექტი: კლასიკური ფუნქციებს აქვთ წვდომაarguments-ზე, სლექსური — არა (მაგრამ შეიძლება გამოიყენოთ rest-პარამეტრები).- კონსტრუქტორები: კლასიკური ფუნქციები შეიძლება გამოყენებულ იქნას როგორც კონსტრუქტორები
new-თან ერთად. სლექსური — არა. prototypeთვისება: კლასიკური ფუნქციებს აქვსprototype-ის თვისება. სლექსური — არა.
მაგალითი this-თან მუშაობის:
// კლასიკური ფუნქციის მაგალითი
const obj = {
name: 'ობიექტი',
greet: function() {
console.log(this.name); // this ეხება obj-ს
}
};
obj.greet(); // გამოიტანს: ობიექტი
const greetFunc = obj.greet;
greetFunc(); // გამოიტანს: undefined (ან Window ბრაუზერში) - this კარგავს კონტექსტს
// სლექსური ფუნქციის მაგალითი
const objArrow = {
name: 'სლექსური ობიექტი',
greet: () => {
console.log(this.name); // this მემკვიდრეობით იღებს გარედან კონტექსტს (ამ შემთხვევაში global ან Window)
}
};
objArrow.greet(); // გამოიტანს: undefined (ან Windows-ის სახელი, თუ განსაზღვრულია)
const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // გამოიტანს: undefined (ან Windows-ის სახელი) - this არ იცვლება