Эгер logHello функциясы стрелкача жазылган болсо жана runOnce ичинде fn.call(this, ...args) аркылуу чакырылса, анда this контексти эмне болот? logHello функциясында контекст туура өткөрүлүшү үчүн эмне өзгөртүлүшү керек?
Frontend
CamelCase жолунун snake_case га айландыруучу функция жазгыла. Регулярдуу өрнөктөрдү, белгилердин коддорун же катуу белгиленген белгилер тизмесин колдонууга болбойт; чечим универсалдуу болушу керек. Убакыт жана орун татаалдыгын баалаңыз.
Эмне үчүн sleep(2000) жана sleep(1000) эки жолу чакырылганда, биринчи кезекте 1 секунддук лог чыгат, андан кийин 2? Event Loop, микро жана макро тапшырмаларынын иштешин түшүндүрүңүз.
/* Бизде төмөнкү форматта билеттер топтому бар: [ { from: 'Лондон', to: 'Москва' }, { from: 'NY', to: 'Лондон' }, { from: 'Москва', to: 'Санкт-Петербург' }, ... ] Бул билеттерден бир гана үзгүлтүксүз маршрут түзүүгө болот. Маршрутта циклдер жана кайталануу жок. Бул ошол эле билет объекттерин маршрут боюнча тартипте кайтарган программа жазыш керек. */ function getRoute(tickets = [], startCity) { // кодуңузду бул жерге жазгыла } console.clear() console.log(getRoute([ { from: 'Лондон', to: 'Москва' }, { from: 'NY', to: 'Лондон' }, { from: 'Москва', to: 'Санкт-Петербург' }, ], 'NY')); /* [ { from: 'NY', to: 'Лондон' }, { from: 'Лондон', to: 'Москва' }, { from: 'Москва', to: 'Санкт-Петербург' }, ] */
Маалыматтар базалары жана API менен иштөө билими
/** * `asyncAuth(callback)` функциясы callback кабыл алат, анын ичинде * ката (биринчи аргумент катары) жана маалыматтар * бекендден (экинчи аргумент катары) өткөрүлүшү мүмкүн. * asyncAuth((error, data) => {}); * * Сиз `auth()` функциясын иштеп чыгышыңыз керек, * ал `asyncAuth()` чакырат, бирок Promise кайтарат. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * `tryAuth()` функциясы `auth()`'ду колдонуп, ката болсо, * N кошумча аракет кылат. * Бардык аракеттер ийгиликсиз болсо, акыркы катаны кайтарат. * * @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); }); }
Коммерциялык тажрыйбаңызда TypeScript жана JavaScriptтен тышкары дагы эмне жазышыңыз керек болду?
/* Array.prototype.some үчүн polyfill жазуу керек Параметрлер - callback - ар бир элементти текшерүүчү функция, үч аргумент кабыл алат: - element - Учурда иштетилип жаткан массивдеги элемент. - index (Керек болсо) - Учурда иштетилип жаткан элементтин индекси. - array (Керек болсо) - Итерирлөө жүргүзүлүп жаткан массив. - thisArg (Керек болсо) - callback функциясы ишке ашырылганда this катары колдонулган мааниси. Кайтарылуучу мааниси Эгер текшерүү функциясы кеминде бир элемент үчүн truthy маанисин кайтарса, true, башкача болсо 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; }
Эгер биз бөлүнүүчү сандарды эске алуу керек болсо, times ыкмасына эмне кошуу керек?
Кайсы командада иштеп жатасыз жана кайсы долбоорго?
Promise статикалык ыкмаларын колдонбостон убадаларды кошуу тапшырмасын чечүү мүмкүнбү? Цикл ичинде убадаларды аткаруу Promise.all менен кандай айырмаланат — параллель же кезектешип?
Дарахтада чӯчкилар ва қарғалар отират. Дарахттаги барча чӯчкиларни топуп, уларнинг исмларини қайтарувчи функция ёзиш керак. Кутилган натижа: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
callLimit(fn, limit, callback) декораторун ишке ашырыңыз, ал функциянын чакырулар санын чектейт. Алынат: декорациялоо үчүн функция, максималдуу чакыруулар саны, акыркы чакырууда чакырылуучу callback (опционалдуу). Кайтарылган функцияда reset методу болушу керек, ал эсептегичти баштапкы абалга кайтарат.
Ключ боюнча маалымат сактоо үчүн эмне жакшы: Map же жөнөкөй обьектпи? Mapтин артыкчылыктары эмне?
Sleep, убакыт өлчөгүчтөр, Promise жана тапшырмалар кезеги менен мисалда консолго чыгуу тартибин жана өлчөнгөн убакыттын маанилерин аныктаңыз; чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу чынжырлануу.
Кампанияда ишиңизде эмне жакты жана эмне жакпайт?
/** * Мүнөздүү миллисекунддарга "уйку" керек болгон асинхрондуу функция жазуу керек, * андан кийин ийгиликтүү аяктайт */ function sleep(duration) { } // Мисал const startTime = Date.now(); console.log("Уйкуга жатабыз..."); sleep(2000).then(() => { console.log("2 секунддан кийин ойгонду!"); console.log("Өтүп кеткен убакыт: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("1 секунддан кийин ойгонду!"); console.log("Өтүп кеткен убакыт: ", Date.now() - startTime); });
Array.prototype-ду кеңейтіңіз, ол массивтеги элементтерді берілген функция арқылы есептелген кілт бойынша топтастырып, әр кілтке сәйкес элементтер массивін қайтарсын. Кілтті есептеу функциясы мәтін немесе сан емес нәрсе қайтарса, не болатынын түсіндіріңіз.
/** * runOnce деп аталган орам функциясын ишке ашырыңыз, ал * ал функция кабыл алат жана жаңы функцияны кайтарат. Жаңы * функция бир гана жолу чакырылышы мүмкүн, бардык кийинки * чакыруулар undefined кайтарат. * * Орамалган функция аргументтерди кабыл алууга жана натыйжаны кайтарууга болот. */ function runOnce(fn) { // сиздин кодуңуз } const logHello = (name) => { console.log(`салам, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'салам, Oleg!' logHelloOnce('Olga'); // undefined