Sobes.tech
Junior

JavaScriptda o'q chiziqli funksiyalar va oddiy funksiyalar o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

  1. Sintaks:
    • Oddiy funktsiya: function myFunction() { ... }
    • O'q funktsiyasi: () => { ... } yoki param => { ... }
  2. this konteksti:
    • Oddiy funktsiya: this chaqirish kontekstiga qarab aniqlanadi.
    • O'q funktsiya: this leksikal tarzda atrofdagi doiradan meros oladi (o'zining thisi yo'q).
  3. Konstruktorlar:
    • Oddiy funktsiya: Konstruktor sifatida ishlatilishi mumkin (new myFunction()).
    • O'q funktsiya: Konstruktor sifatida ishlatilmaydi.
  4. arguments obyekti:
    • Oddiy funktsiya: O'zining arguments obyekti bor, unda o'tkazilgan argumentlar saqlanadi.
    • O'q funktsiya: O'zining arguments obyekti yo'q, argumentlarga kirish rest parametrlar (...args) orqali amalga oshiriladi.
  5. Nomlangan funktsiyalar:
    • Oddiy funktsiya: Nomlanishi mumkin (function myFunction() { ... }).
    • O'q funktsiya: Avtomatik ravishda nomlanmagan, o'zgaruvchiga tayinlanadi (const myFunction = () => { ... }).
  6. Noma'lum qaytish (implicit return):
    • Oddiy funktsiya: Aniq return kalit so'zidan foydalanishni talab qiladi (soddaroq holatlar, masalan IIFE uchun).
    • O'q funktsiya: Bir satrli tanasi bo'lsa, ifoda natijasini noma'lum tarzda qaytarishi mumkin (return yozmasdan).

Taqqoslash jadvali:

Xususiyat Oddiy funktsiya O'q funktsiya
Sintaksis function name() { ... } () => { ... }
this konteksti Dinamik (chaqirishga bog'liq) Lexikal (ota doirasidan)
Konstruktorlar Ha Yo'q
arguments obyekti Ha Yo'q (rest parametrlar ishlatiladi)
Nomlanish Nomlanishi mumkin Nomlanmagan (berilgan)
Noma'lum qaytish Yo'q (odatda return talab qilinadi) Ha (bir satrli tanada)
// Oddiy funktsiya misollari
function standardFunction() {
  console.log(this); // Chaqirish kontekstiga bog'liq
  console.log(arguments); // arguments obyekti mavjud
}

const obj = {
  method: standardFunction
};

standardFunction(); // `this` window (brauzerda) yoki undefined (katı rejimda)
obj.method(); // `this` obj
new standardFunction(); // `this` yangi instansiya

// O'q funktsiyalari misoli
const arrowFunction = () => {
  console.log(this); // Atrofdagi kontekstdan `this` meros oladi
  // console.log(arguments); // Xato, `arguments` mavjud emas
};

const outerObj = {
  outerMethod: function() {
    const innerArrowFunction = () => {
      console.log(this); // outerMethod'dan `this` (outerObj)
    };
    innerArrowFunction();
  }
};

arrowFunction(); // `this` window yoki {} (Node.js)
outerObj.outerMethod(); // innerArrowFunction'da `this` outerObj

// Noma'lum qaytish o'q funktsiyasida
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5

// Oddiy funktsiya bilan aniq qaytish
function multiply(a, b) {
  return a * b;
}
console.log(multiply(2, 3)); // 6

// O'q funktsiya konstruktor bo'la olmaydi
// new arrowFunction(); // Xato: TypeError: arrowFunction_1 constructor emas