# Front-end собеседование Игоря Фролова ## Задачи ### Как боротья с сайд-эффектами? #### Ответ Использовать Saga Разрулирование запросов ### Что такое чистая функция? #### Ответ — ### Какие значения возвращает `typeof`? #### Ответ ``` string number object boolean undefined ``` ### Какие типы есть в JS? #### Ответ ``` все те же, что возвращает typeof + NaN ``` ### Как проверить переменную `combo` на массив? #### Ответ ``` Array.isArray(combo) ``` ### Какие методы массива знаете и используете? #### Ответ ```javascript // map reduce foreach filter sort var a = [1, 100, 3]; a.reduce((currentItem, accumulator) => { return currentItem + accumulator; },0) a.sort() // [1, 3, 100] ``` ### Как преобразовать массив в объект? ```javascript var list = [ { name: 'width', value: 10 }, { name: 'height', value: 20 }, { name: 'x', value: 30 } ]; // TODO: { width: 10, height: 20, x: 30 } ``` #### Ответ ```javascript const a = {}; list.forEach((item) => { a[item.name] = item.value; }); return a; ``` ### Что будет выведено в консоль? ```javascript var b = {}; var c; b.b = 1; c = b; c.b = 2; console.log('1)', b.b); console.log('2)', c.b); var a = { counter: 1 }; function inc(obj) { obj.counter++; obj.changed = true; } inc(a); console.log('3)', a); ``` #### Ответ ``` 1) 1 2) 2 3) { counter: 1 } ``` ### Как отрендерится код? ```htmlmixed <div style="float: left; border: 1px solid red;"> <span style="position: relative; top: -1000px; left: -1000px; border: 1px solid green;" > Inner text </span> </div> ``` #### Ответ ``` div не знаю span улетит вверх влево ``` ### Как решить задачу? ```javascript // Есть функция и объект. // Необходимо, чтобы функция в консоли вывела значение 'wow'. // Как добиться желаемого не изменяя тело функции? function f() { console.log(this.x); } var obj = { x: 'wow' }; ``` #### Ответ ```javascript f().bind(obj); f.call(obj); f.apply(obj); ``` ### Написать счетчик используя замыкание #### Ответ ```javascript class Counter { counter = 0; up = () => { return ++counter; } down = () => { return --counter; } getState = () => { return counter; } } var counter = new Counter(); console.log(counter.up()); // 1 console.log(counter.up()); // 2 console.log(counter.up()); // 3 console.log(counter.getState()) // 3 console.log(counter.up()); // 4 console.log(counter.down()); // 3 ``` ### Решить задачу * Необходимо написать функцию, которая на вход принимает урл, асинхронно ходит по этому урлу GET запросом и возвращает данные (json) * Для получении данных можно использовать fetch * Если во время запроса произошла ошибка, то пробовать запросить ещё 5 раз * Если в итоге информацию получить не удалось, выбросить ошибку «Заданный URL недоступен». #### Ответ ```javascript const requestCounter = 0; const _request = () => { requestCounter++; axios.get('http://url') .then(onSuccess) .catch(onError); }; const onSuccess = (payload) => { console.log(payload); }; const onError = (err) => { if(requestCounter === 5) { console.error(err); return; } _request(); } ``` ### Что будет выведено в консоль? ```javascript console.log('start'); setTimeout(function() { console.log('setTimeout'); }, 0); Promise.resolve() .then(function() { console.log('promise1'); }). .then(function() { console.log('promise2'); }); console.log('finish'); ``` #### Ответ ``` start finish propmise1 promise2 setTimeout ``` ### Написать функцию для проверки слова на палиндром ```javascript // Написать функцию, которая на вход получает слово, // а на выходе выдает true, если входящее слово палиндром, // иначе false. Функция должна игнорировать регистр символов. function checkIsPalindrome(word) { // … } console.log(1, checkIsPalindrome('Иван') === false); console.log(2, checkIsPalindrome('доход') === true); console.log(3, checkIsPalindrome('Доход') === true); console.log(4, checkIsPalindrome('ЗаКаз') === true); ``` #### Ответ ```javascript function checkIsPalindrome(word) { const wLength = word.length; const lower = word.toLowerCase(); const neededLength = wLength > 1 ? Math.floor(wLength/2) : wLength; for (i = 0; i < neededLength; i++) { var firstChar = lower[i]; var secondChar = lower[wLength - i]; if(firstChar !== secondChar) { return false; } } return true; // toLowerCase // x = length / 2 // floor // for x } ``` ### Как сверстать? <p><img src="https://i.imgur.com/UJPisQ2.png" width="308"/></p> #### Ответ ```jade style | Объяснил на словах — всё ОК Использует flex div.wrapper div.image-container div.image div.text(style="word-wrap") strong Константин span web-developer div.close(style="transform: rotate") ```