Rest parametrlar va spread sintaksisi

...

Rest parametrlar va spread sintaksisi

JavaScript da ko'plab ichki funksiyalar istalgancha argument qabul qilishi mumkin.

Masalan:

  • Math.max(arg1, arg2, ..., argN) – argumentlarning eng kattasini qaytaradi.
  • Object.assign(dest, src1, ..., srcN)src1..N ni dest ga nusxa ko'chiradi.

Ushbu bobda biz xuddi shunday qanday qilishni o'rganamiz. Shuningdek, qanday qilib massivlarni bunday funksiyalarga parametr sifatida o'tkazishni ham ko'rib chiqamiz.

Rest parametrlar

Funksiya har qancha argument bilan chaqirilishi mumkin, bu uning qanday aniqlanganiga bog'liq emas.

Masalan:

function sum(a, b) {
  return a + b;
}
 
alert(sum(1, 2, 3, 4, 5));

Bu yerda ortiqcha argumentlar sababli xato bo'lmaydi. Ammo, natijada faqat birinchi ikkita qiymat hisobga olinadi va kodda natija 3 bo'ladi.

Rest parametrlar funksiyaning aniqlanishida uchta nuqta (...) orqali qo'shilishi mumkin. Bu nuqtalar Rest parametrlarni massivga yig'ish uchun ishlatiladi.

Masalan, barcha argumentlarni args massiviga yig'ish uchun:

function sumAll(...args) {
  // args massivning nomi
  let sum = 0;
 
  for (let arg of args) sum += arg;
 
  return sum;
}
 
alert(sumAll(1)); // 1
alert(sumAll(1, 2)); // 3
alert(sumAll(1, 2, 3)); // 6

Biz birinchi parametrlarni o'zgaruvchilar sifatida olishimiz va faqat Restlarini yig'ishimiz mumkin.

Bu yerda birinchi ikkita argument o'zgaruvchilar sifatida olinadi va Restlari titles massiviga yig'iladi:

function showName(firstName, lastName, ...titles) {
  alert(firstName + ' ' + lastName); // Julius Caesar
 
  // Restlari titles massiviga yig'iladi
  // titles = ["Consul", "Imperator"]
  alert(titles[0]); // Consul
  alert(titles[1]); // Imperator
  alert(titles.length); // 2
}
 
showName('Julius', 'Caesar', 'Consul', 'Imperator');

Rest parametrlar oxirida bo'lishi kerak

Rest parametrlar barcha Rest argumentlarni yig'adi, shuning uchun quyidagi holat noto'g'ri bo'ladi va xato yuzaga keladi:

function f(arg1, ...rest, arg2) { // ...rest dan keyin arg2 bo'lishi mumkin emas!
  // xato
}

Rest parametrlar har doim oxirgi bo'lishi kerak.

"arguments" o'zgaruvchisi

Shuningdek, arguments nomli maxsus massivga o'xshash obyekt mavjud bo'lib, u barcha argumentlarni indekslari bo'yicha o'z ichiga oladi.

Masalan:

function showName() {
  alert(arguments.length);
  alert(arguments[0]);
  alert(arguments[1]);
}
 
showName('Julius', 'Caesar'); // Ko'rsatadi: 2, Julius, Caesar
showName('Ilya'); // Ko'rsatadi: 1, Ilya, undefined

Ilgari Rest parametrlar tilga kiritilmagan edi va funksiyadagi barcha argumentlarni olishning yagona usuli arguments edi. U hali ham ishlaydi, lekin kamchilik shundaki, arguments massivga o'xshash bo'lsa ham, u massiv emas.

Arrow funksiyalar va "arguments"

Arrow funksiyalar o'zlarining arguments obyektiga ega emas. Agar biz arguments obyektiga murojaat qilsak, u tashqi funksiyadan olinadi.

Masalan:

function f() {
  let showArg = () => alert(arguments[0]);
  showArg();
}
 
f(1); // 1

spread (spread) sintaksisi

Ba'zida massivni argumentlar ro'yxatiga aylantirishimiz kerak bo'ladi.

Masalan, Math.max funksiyasi eng katta sonni qaytaradi:

alert(Math.max(3, 5, 1)); // 5

Ammo agar bizda massiv bo'lsa, uni qanday qilib Math.max ga yuborish mumkin?

spread sintaksisi yordamga keladi! U xuddi Rest parametrlarga o'xshaydi, ammo aksi bo'ladi. spread sintaksisi massivni argumentlar ro'yxatiga kengaytiradi.

Masalan:

let arr = [3, 5, 1];
alert(Math.max(...arr)); // 5

Massivlar va obyektlarni nusxalash

Object.assign haqida gapirganimizda, biz spread sintaksisini ham ishlatishimiz mumkinligini bilamiz.

let arr = [1, 2, 3];
let arrCopy = [...arr]; // massivni kengaytirib, yangi massivga qo'yadi

spread sintaksisi orqali obyektlarni ham nusxalash mumkin:

let obj = { a: 1, b: 2, c: 3 };
let objCopy = { ...obj };

Xulosa

Kodda ... ko'rganimizda, bu yoki Rest parametrlar, yoki spread sintaksisi bo'lishi mumkin.

  • Funksiya parametrlarida ... Rest parametrlar bo'lib, argumentlarni massivga yig'adi.
  • Funksiya chaqirilganida esa bu spread sintaksisi bo'lib, massivni argumentlar ro'yxatiga aylantiradi.

Ushbu sahifada

GitHubda tahrirlash