Əgər logHello funksiyası ox funksiyası kimi yazılıbsa və runOnce daxilində fn.call(this, ...args) vasitəsilə çağırılırsa, this konteksti nə olacaq? logHello funksiyasında kontekstin düzgün ötürülməsi üçün nə dəyişdirilməlidir?
Frontend
CamelCase sətirini snake_case-ə çevirmək üçün funksiya yazın. Nümunə ifadələr, simvol kodları və ya sərt təyin olunmuş simvol siyahısı istifadə edilə bilməz; həll ümumi olmalıdır. Vaxt və yaddaş mürəkkəbliyini qiymətləndirin.
Niyə iki dəfə sleep(2000) və sleep(1000) çağırışından sonra əvvəlcə 1 saniyəlik log, sonra isə 2 saniyəlik log göstərilir? İzah edin Event Loop, mikro və makro tapşırıqların işləmə prinsipi.
Verilənlər bazaları və API-lərlə işləmək haqqında bilik
/* Bizdə aşağıdakı formada bilet toplusu var: [ { from: 'Londonda', to: 'Moskva' }, { from: 'NY', to: 'Londonda' }, { from: 'Moskva', to: 'Sankt-Peterburg' }, ... ] Bu biletlərdən tək, fasiləsiz marşrut qurmaq mümkündür. Marşrutda döngə və ya təkrarlama yoxdur. Eyni bilet obyektlərini marşrut üzrə ardıcıllıqla qaytaran proqram yazmalısınız. */ function getRoute(tickets = [], startCity) { // kodunuzu buraya yazın } 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' }, ] */
/** * `asyncAuth(callback)` funksiyası callback qəbul edir, onun içində * bir səhv (birinci arqument kimi) və backend-dən məlumatlar * (ikinci arqument kimi) keçə bilər. * asyncAuth((error, data) => {}); * * Siz `auth()` funksiyasını həyata keçirməlisiniz, * bu `asyncAuth()` çağırır, amma Promise qaytarır. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * `tryAuth()` funksiyası `auth()`-u istifadə edir və, səhv olarsa, * N əlavə cəhd edir. * Bütün cəhdlər uğursuz olarsa, son səhvi qaytarır. * * @returns {Promise} */ function tryAuth(n) { }
/** * 'asyncAuth(callback)' funksiyası callback qəbul edir, onun içində * bir səhv (birinci arqument) və məlumatlar * backend-dən (ikinci arqument) keçə bilər. * asyncAuth((error, data) => {}); * * Siz 'auth()' funksiyasını həyata keçirməlisiniz, * bu 'asyncAuth()' çağırır, amma Promise qaytarır. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * 'tryAuth()' funksiyası 'auth()' istifadə edir və, səhv baş verdikdə, * N əlavə cəhd edir. * Bütün cəhdlər uğursuz olarsa, sonuncu səhvi qaytarır. * * @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); }); }
Ticarət təcrübənizdə TypeScript və JavaScript-dən başqa nəyə yazmalı oldunuz?
Əgər kəsirli ədədləri nəzərə almamız lazımdırsa, times metoduna nə əlavə etməliyik?
/* Array.prototype.some üçün polyfill yazılmalıdır Parametrlər - callback - hər elementi yoxlayan funksiya, üç arqument qəbul edir: - element - Hal-hazırda işlənən massiv elementidir. - index (İstəyə bağlı) - Hal-hazırda işlənən elementin indeks nömrəsi. - array (İstəyə bağlı) - İterasiya olunan massiv. - thisArg (İstəyə bağlı) - callback funksiyasını icra edərkən this kimi istifadə olunan dəyər. Qaytarma dəyəri Ən azı bir element üçün yoxlama funksiyası truthy dəyər qaytararsa true, əks halda 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; }
Hansı komandada işləyirsiniz və hansı layihədə?
Promise statik metodlarından istifadə etmədən vədlərin cəmlənməsi tapşırığını həll etmək mümkündürmü? Döngü içində vədlərin icrası Promise.all-dan fərqli olacaq — paralel və ya ardıcıl?
Ağacda siçanlar və qartallar oturur. Ağacda bütün siçanları tapıb adlarını qaytaran funksiya yazmaq lazımdır. Gözlənilən nəticə: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
Sleep, zamanlayıcılar, Promise və tapşırıq növbələri ilə nümunədə konsola çıxış sırasını və ölçülmüş vaxt dəyərlərini müəyyən edin; niyə faktiki gecikmənin təyin ediləndən çox ola biləcəyini izah edin.
callLimit(fn, limit, callback) dekoratorunu tətbiq edin; bu, funksiyanın çağırış sayını məhdudlaşdırır. Qəbul edir: dekorasiya ediləcək funksiya, maksimum çağırış sayı, son çağırışda çağrılan callback (istəyə bağlı). Qaytarılan funksiyanın sıfırlama üçün reset adlı metodu olmalıdır.
Açar ilə məlumat saxlamaq üçün nə daha yaxşıdır: Map və ya adi obyekt? Map-in üstünlükləri nədir?
Array.prototype-u genişləndirin və array elementlərini ötürülən funksiyadan əvvəlcədən hesablanmış açar ilə qruplaşdıran və hər bir açara uyğun elementlər massivini qaytaran bir metod əlavə edin. Açar hesablaması funksiyası string və ya rəqəm olmayan bir şey qaytararsa, nə baş verəcəyini izah edin.
/** * Gerekli olan, belirtilen milisaniye kadar "yatmak" ve sonra başarıyla tamamlanan * asinxron bir fonksiyon yazmaktır */ function sleep(duration) { } // Örnek const startTime = Date.now(); console.log("Uykuya dalınıyor..."); sleep(2000).then(() => { console.log("2 saniye sonra uyandı!"); console.log("Geçen zaman: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("1 saniye sonra uyandı!"); console.log("Geçen zaman: ", Date.now() - startTime); });
// Sizə latın hərflərindən, boşluqlardan və durğu işarələrindən ibarət sətir verilir. // Sətir ən azı bir dəfə hər 26 hərfi ehtiva edirsə, pangram adlanır. Sətirin pangram olub-olmadığını müəyyən edin. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // kodunuz buraya } console.log(isPangram(`A pangram or holoalphabetic sentence is a using every letter of a given alphabet at least once.`)); // => console.log(isPangram('Waltz, bad nymph, for quick jigs vex.'))
/** * runOnce adlı sarmalayıcı funksiyanı tətbiq edin, bu * bir funksiyanı qəbul edir və yeni bir funksiya qaytarır. Yeni * funksiya yalnız bir dəfə çağırıla bilər, bütün növbəti * çağırışlar undefined qaytarır. * * Sarılmış funksiya arqumentlər qəbul edə bilər * və nəticə qaytara bilər. */ function runOnce(fn) { // sizin kod } const logHello = (name) => { console.log(`salam, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'salam, ${name}!' logHelloOnce('Olga'); // undefined