Junior
JavaScriptda o'q chiziqli funksiyalar va oddiy funksiyalar o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
- Sintaks:
- Oddiy funktsiya:
function myFunction() { ... } - O'q funktsiyasi:
() => { ... }yokiparam => { ... }
- Oddiy funktsiya:
thiskonteksti:- Oddiy funktsiya:
thischaqirish kontekstiga qarab aniqlanadi. - O'q funktsiya:
thisleksikal tarzda atrofdagi doiradan meros oladi (o'ziningthisi yo'q).
- Oddiy funktsiya:
- Konstruktorlar:
- Oddiy funktsiya: Konstruktor sifatida ishlatilishi mumkin (
new myFunction()). - O'q funktsiya: Konstruktor sifatida ishlatilmaydi.
- Oddiy funktsiya: Konstruktor sifatida ishlatilishi mumkin (
argumentsobyekti:- Oddiy funktsiya: O'zining
argumentsobyekti bor, unda o'tkazilgan argumentlar saqlanadi. - O'q funktsiya: O'zining
argumentsobyekti yo'q, argumentlarga kirish rest parametrlar (...args) orqali amalga oshiriladi.
- Oddiy funktsiya: O'zining
- Nomlangan funktsiyalar:
- Oddiy funktsiya: Nomlanishi mumkin (
function myFunction() { ... }). - O'q funktsiya: Avtomatik ravishda nomlanmagan, o'zgaruvchiga tayinlanadi (
const myFunction = () => { ... }).
- Oddiy funktsiya: Nomlanishi mumkin (
- Noma'lum qaytish (implicit return):
- Oddiy funktsiya: Aniq
returnkalit 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 (
returnyozmasdan).
- Oddiy funktsiya: Aniq
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