Agar logHello funktsiyasi o'q shaklida yozilgan bo'lsa va runOnce ichida fn.call(this, ...args) orqali chaqirilsa, this konteksti nima bo'ladi? logHello funktsiyasida kontekst to'g'ri uzatilishi uchun nima o'zgartirilishi kerak?
Frontend
CamelCase satrini snake_case ga aylantirish uchun funktsiya yozing. Regulyar ifodalar, belgi kodlari yoki qattiq belgilangan belgilar ro'yxati ishlatilmasligi kerak; yechim universal bo'lishi kerak. Vaqt va joy murakkabligini baholang.
Nima uchun sleep(2000) va sleep(1000) ikki marta chaqirilganda, avvalo 1 sekundlik log chiqariladi, keyin esa 2 sekundlik? Event Loop, mikro va makro vazifalarining ishlashini tushuntiring.
/* Bizda quyidagi shaklda chiptalar to'plami mavjud: [ { from: 'Londonda', to: 'Moskva' }, { from: 'NY', to: 'Londonda' }, { from: 'Moskva', to: 'Sankt-Peterburg' }, ... ] Ushbu chiptalardan yagona, uzluksiz marshrut qurish mumkin. Marshrutda aylana yoki takrorlanishlar yo'q. Ushbu bir xil chiptalar ob'ektlarini marshrut bo'yicha ketma-ketlikda qaytaradigan dastur yozishingiz kerak. */ function getRoute(tickets = [], startCity) { // kodingizni bu yerga yozing } console.clear() console.log(getRoute([ { from: 'Londonda', to: 'Moskva' }, { from: 'NY', to: 'Londonda' }, { from: 'Moskva', to: 'Sankt-Peterburg' }, ], 'NY')); /* [ { from: 'NY', to: 'Londonda' }, { from: 'Londonda', to: 'Moskva' }, { from: 'Moskva', to: 'Sankt-Peterburg' }, ] */
Ma'lumotlar bazalari va API bilan ishlash bo'yicha bilim
/** * `asyncAuth(callback)` funksiyasi callback qabul qiladi, unda * xato (birinchi argument sifatida) va backenddan ma'lumotlar * (ikkinchi argument sifatida) o'tkazilishi mumkin. * asyncAuth((error, data) => {}); * * Siz `auth()` funksiyasini amalga oshirishingiz kerak, * bu `asyncAuth()`ni chaqiradi, ammo Promise qaytaradi. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * `tryAuth()` funksiyasi `auth()`dan foydalanadi va xato bo'lsa, * N ta qo'shimcha urinish qiladi. * Agar barcha urinishlar muvaffaqiyatsiz bo'lsa, oxirgi xatoni qaytaradi. * * @returns {Promise} */ function tryAuth(n) { }
/** * 'asyncAuth(callback)' функциясы callback кабул кылат, анда * ката (биринчи аргумент) жана серверден алынган маалыматтар * (экинчи аргумент) өткөрүлүшү мүмкүн. * asyncAuth((error, data) => {}); * * 'auth()' функциясын ишке ашырышыңыз керек, * ал 'asyncAuth()' чакырып, бирок Promise кайтарат. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * 'tryAuth()' функциясы 'auth()' колдонуп, ката болсо, * N кошумча аракет кылат. * Бардык аракеттер ийгиликсиз болсо, акыркы катаны кайтарат. * * @returns {Promise} */ function tryAuth(n) { return new Promise((resolve, reject) => { function attempt(attemptsLeft) { auth().then(resolve).catch((error) => { if (attemptsLeft <= 0) { reject(error); } else { attempt(attemptsLeft - 1); } }); } attempt(n); }); }
Tijorat tajribangizda TypeScript va JavaScriptdan tashqari nima yozishingiz kerak edi?
/* Array.prototype.some uchun polyfill yozish kerak Parametrlar - callback - har bir elementni tekshiradigan funksiya, uchta argument qabul qiladi: - element - Hozirgi ishlov berilayotgan element massivda. - index (İste'molchi) - Hozirgi ishlov berilayotgan elementning indeks raqami. - array (İste'molchi) - O'tkazilayotgan massiv. - thisArg (İste'molchi) - callback funksiyasini bajarishda this sifatida ishlatiladigan qiymat. Qaytish qiymati Agar tekshiruv funksiyasi kamida bitta element uchun truthy qiymat qaytarsa true, aks holda false. */ Array.prototype.some = function (callback, thisArgs) { const array = this; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; const result = callback.call(thisArgs, array[i], i, array); if (result) return true; } return false; }
Agar biz bo'linma sonlarini hisobga olishimiz kerak bo'lsa, times metodiga nima qo'shishimiz kerak?
Qaysi jamoada ishlayapsiz va qaysi loyiha ustida?
Promise statik metodlarini ishlatmasdan va'dalarni yig'ish vazifasini hal qilish mumkinmi? Tsikldagi va'dalarni bajarish Promise.all bilan qanday farq qiladi — parallel yoki ketma-ket?
Daraxtda yong'oqchilar va qora qushlar o'tiradi. Daraxtdagi barcha yong'oqchilarni topadigan va ularning ismlarini qaytaradigan funktsiya yozish kerak. Kutilyotgan natija: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
callLimit(fn, limit, callback) dekoratorini amalga oshirish, bu funksiyaning chaqirilishlar sonini cheklaydi. Qabul qiladi: dekoratsiya qilinadigan funksiya, maksimal chaqirilishlar soni, oxirgi chaqirilishda chaqiriladigan callback (ixtiyoriy). Qaytarilgan funksiya reset metodiga ega bo'lishi kerak, bu hisoblagichni boshlang'ich holatiga qaytaradi.
Kalitga asoslangan ma'lumotlarni saqlash uchun nima afzal: Map yoki oddiy obyekt? Mapning afzalliklari nima?
Sleep, vaqt o'lchovlari, Promise va vazifa navbatlari bilan misolda konsolga chiqarish tartibi va o'lchangan vaqt qiymatlarini aniqlang; haqiqiy kechikish belgilanganidan katta bo'lishi mumkinligini tushuntiring.
Kompaniyada ishingizda nima yoqadi va nima yoqmaydi?
/** * Belirtilen millisekund davomida "uyqu" qilish va keyin muvaffaqiyatli yakunlanadigan * asinxron funktsiya yozish kerak */ function sleep(duration) { } // Misol const startTime = Date.now(); console.log("Uyqu boshlanmoqda..."); sleep(2000).then(() => { console.log("2 sekunddan keyin uyg'ondi!"); console.log("O'tgan vaqt: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("1 sekunddan keyin uyg'ondi!"); console.log("O'tgan vaqt: ", Date.now() - startTime); });
Array.prototype ni kengaytiring, u elementlarni kalit bo'yicha guruhlash uchun o'tkazilgan funktsiya yordamida hisoblangan kalitga asoslangan metod bilan va har bir kalitga mos keladigan elementlar massivini qaytaradigan ob'ekt. Kalit hisoblash funktsiyasi string yoki raqam bo'lmagan narsani qaytaradigan bo'lsa, nima bo'lishini tushuntiring.
/** * runOnce nomli o'ram funksiyasini amalga oshiring, bu * funksiyani qabul qiladi va yangi funksiyani qaytaradi. Yangi * funksiya faqat bir marta chaqirilishi mumkin, barcha keyingi * chaqiruvlar undefined qaytaradi. * * O'ralgan funksiya argumentlarni qabul qilishi * va natijani qaytarishi mumkin. */ function runOnce(fn) { // sizning kodingiz } const logHello = (name) => { console.log(`salom, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'salom, Oleg!' logHelloOnce('Olga'); // undefined