Всем привет, итак, #Задачка1, на смекалочку, легенькая:
Нужно написать тело ифа как можно короче, чтоб в итоге массив
Спасибо Марине за вопрос, свои присылайте мне на @djamah
Правильный ответ будет завтра.
var arr = [1,2,42,3];
var brr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] === 42) {
}
brr.push(arr[i]);
}
Нужно написать тело ифа как можно короче, чтоб в итоге массив
brr был такой [1,2,3]Спасибо Марине за вопрос, свои присылайте мне на @djamah
Правильный ответ будет завтра.
Ответ к #Задачка1
Первым делом, конечно же (возможно не у всех), в голову начинают лезть всякие сложные варианты с переназначением массива, слайсами и сплайсами, это все глупости — гоните их из головы.
Потом приходит более светлая мысль: ну если последняя строка в теле цикла добавляет элемент в массив, может, мы ее как-то пропустим? Пропустим... о, точно,
Но в задании было не 'как можно проще', а 'как можно короче' и если чуть подумать, то становится очевидно, что лучше чем пропускать итерацию цикла будет просто текущую превратить в следующую.
Самый короткий вариант:
Первым делом, конечно же (возможно не у всех), в голову начинают лезть всякие сложные варианты с переназначением массива, слайсами и сплайсами, это все глупости — гоните их из головы.
Потом приходит более светлая мысль: ну если последняя строка в теле цикла добавляет элемент в массив, может, мы ее как-то пропустим? Пропустим... о, точно,
continueНо в задании было не 'как можно проще', а 'как можно короче' и если чуть подумать, то становится очевидно, что лучше чем пропускать итерацию цикла будет просто текущую превратить в следующую.
Самый короткий вариант:
i++;Часто у меня спрашивают что-то вроде: а такой вопрос вообще нормально на джуниорском собеседовании задавать?
Друзья, любой вопрос можно задавать на любом собеседовании, а вот ответ может быть разного уровня.
В сегодняшней задачке будет очень простой вопрос, а завтра я опубликую, как, на мой взгляд, на него могли бы ответить джуниор и синьер
#Задачка2:
Чем отличаются
На первый взгляд вопрос очень ламерский, но нужно помнить, что на любом собесе нужно не только ответить на поставленный вопрос, но и показать, что вы умнее остальных)
Подумайте пока, как бы вы ответили на такой вопрос, а завтра я выложу свой вариант.
Друзья, любой вопрос можно задавать на любом собеседовании, а вот ответ может быть разного уровня.
В сегодняшней задачке будет очень простой вопрос, а завтра я опубликую, как, на мой взгляд, на него могли бы ответить джуниор и синьер
#Задачка2:
Чем отличаются
var, let и const?На первый взгляд вопрос очень ламерский, но нужно помнить, что на любом собесе нужно не только ответить на поставленный вопрос, но и показать, что вы умнее остальных)
Подумайте пока, как бы вы ответили на такой вопрос, а завтра я выложу свой вариант.
Доброе утро всем!
Написал ответ к прошлой задачке поздно ночью, но решил вас не будить, почитайте сейчас и хорошего вам дня)
Ответ к #Задачка2
Можно, конечно, сказать просто:
И это просто правильный ответ.
А можно ответить более развернуто:
Ключевые слова
Ключевое слово
При этом нужно помнить, что неизменность этих констант касается прежде всего примитивных типов, а в объектных невозможно присвоить новый массив/объект/функцию, а изменить текущий вполне можно, например код:
будет вполне корректным.
Транспайлеры es2015 преобразовывают и
Вот таких вот два ответа на один вопрос, развернутый можно продолжать и дополнять, но думаю основная идея понятна)
Напоминаю, свой вопрос можно присылать мне на @djamah
Написал ответ к прошлой задачке поздно ночью, но решил вас не будить, почитайте сейчас и хорошего вам дня)
Ответ к #Задачка2
Можно, конечно, сказать просто:
var объявляет переменные с функциональной областью видимости, а let и const c блочной, при этом const нельзя менять.И это просто правильный ответ.
А можно ответить более развернуто:
Ключевые слова
var, let и const используются для создания переменных.var означает функциональную область видимости переменной, то есть переменная видна внутри функции и даже до ее объявления, правда до этого объявления она будет равна undefined.let и const означают блочную область видимости и до объявления не видны, при попытке обращения интерпретатор выдаст ошибку.Ключевое слово
const создает константу, то есть переменную, которую нельзя менять, при попытке ее изменить интерпретатор выбросит исключение.При этом нужно помнить, что неизменность этих констант касается прежде всего примитивных типов, а в объектных невозможно присвоить новый массив/объект/функцию, а изменить текущий вполне можно, например код:
const o = {};
o.name = 'yura';будет вполне корректным.
Транспайлеры es2015 преобразовывают и
let, и 'const' в обычные var, области видимости разруливают на уровне генерации имен, а проверку константности делают просто статическим анализом кода.Вот таких вот два ответа на один вопрос, развернутый можно продолжать и дополнять, но думаю основная идея понятна)
Напоминаю, свой вопрос можно присылать мне на @djamah
#Задачка3
Очень клевая проверка, понимает ли человек, что означает 'передать по ссылке' и 'по значению':
Что мы увидим в консоли? Почему?
Очень клевая проверка, понимает ли человек, что означает 'передать по ссылке' и 'по значению':
var a = {};
(function b ( a ) {
a.a = 10;
a = null;
})( a );
console.log(a);Что мы увидим в консоли? Почему?
👍1
Тем временем уже выложили видео моего выступления, на котором большинство из вас узнало об этом канале
https://www.youtube.com/watch?v=ncaWoyLINoI
Когда это видео наберет 1000 лайков, мы сделаем его вторую часть)
В общем, все как обычно, ставим лайк, подписываемся на канал, шарим видео.
Говорят, что тем, кто расшарит это все, будет пожизненно везти на собесах)
https://www.youtube.com/watch?v=ncaWoyLINoI
Когда это видео наберет 1000 лайков, мы сделаем его вторую часть)
В общем, все как обычно, ставим лайк, подписываемся на канал, шарим видео.
Говорят, что тем, кто расшарит это все, будет пожизненно везти на собесах)
YouTube
Как пройти собеседование по JS? И зачем? | Odessa Frontend Community Meetup | Юрий Федоренко
Юрий Федоренко выступает на Odessa Frontend Community Meetup с докладом на тему «Как пройти собеседование по JS? И зачем?»
Смотрите вторую часть «Как пройти собеседование по JS? И зачем? vol.2»
https://youtu.be/HsXKiKNdeTI
Подписывайтесь на Telegram-канал…
Смотрите вторую часть «Как пройти собеседование по JS? И зачем? vol.2»
https://youtu.be/HsXKiKNdeTI
Подписывайтесь на Telegram-канал…
Ответ к #Задачка3
Для понимания проблемы важно помнить, что локальная переменная — это не только та, которая создана с ключевым словом
Дальше передам слово Диме, который прислал мне ответ с отличной формулировкой:
«В консоль выведется
В функцию передаётся пустой объект, ссылка на него присваивается внутренней [локальной] переменной a, далее в объект записывается свойство a (по ссылке), далее внутренней переменной присваивается значение
Для понимания проблемы важно помнить, что локальная переменная — это не только та, которая создана с ключевым словом
var, но и та, которая параметр функции.Дальше передам слово Диме, который прислал мне ответ с отличной формулировкой:
«В консоль выведется
{ a: 10 }В функцию передаётся пустой объект, ссылка на него присваивается внутренней [локальной] переменной a, далее в объект записывается свойство a (по ссылке), далее внутренней переменной присваивается значение
null и ссылка на него теряется, а вот у внешней a - остаётся.»#Задачка4
Вот есть у нас такой код
Что выведется в консоль? Почему? Какая строка здесь, чтоб вас запутать?
Вот есть у нас такой код
var obj = {
a: function(){
console.log(this.prop);
},
prop: 1
};
obj.a.prop = 2;
obj.a();
var fn = obj.a;
fn();Что выведется в консоль? Почему? Какая строка здесь, чтоб вас запутать?
Ответ на #Задачка4, который прислала Марина и он абсолютно верный:
Выполнится 2 консоль лога, выведется сначала
Запутать нас пытаются строкой
На самом же деле мы создаем свойство
Выполнится 2 консоль лога, выведется сначала
1 а, потом undefined, потому что в первом случае this указывает на объект obj, в котором мы и находим значение свойства prop, а при втором вызове this ссылается на window. У объекта window нет свойства prop, соответственно, в консоли получаем undefined.Запутать нас пытаются строкой
obj.a.prop = 2; — может показаться, что 2 мы присваиваем в obj.prop.На самом же деле мы создаем свойство
prop у obj.a и уже в него присваиваем 2.Если есть кто-то трезвый, вот вам вместо поздравления)
#Задачка5
Есть два фрагмента кода:
1
2
Что выведется в этих двух случаях?
p.s. С новым годом!
#Задачка5
Есть два фрагмента кода:
1
function a () {
return console.log (a)
var a = 5;
};
a();2
function a () {
return console.log (a)
let a = 5;
};
a();Что выведется в этих двух случаях?
p.s. С новым годом!
Ответов на #Задачка5 пришло рекордное количество, вот не спалось же вам)
Теперь к сути. Первое, что хотелось бы отметить, это то, что писать return console.log(...); довольно бессмысленно.
Как, кстати, и писать return alert(...). Дело в том, что обе эти функции всегда возвращают undefined.
По поводу самой задачки передаем слово Диме:
В первом варианте функции законсольложится undefined, так как объявление (но не присвоение значения) переменной а поднимется вверх своей области видимости (т.н. hoisting).
Во втором варианте получим ошибку: a is not defined..., так как при объявлении переменной при помощи let hoisting'а не происходит.
Кстати, что во втором случае выбросит ошибку, внимательные читатели могли знать не только вбив это в консоль, но и просто внимательно прочитав разбор к #Задачка2
Теперь к сути. Первое, что хотелось бы отметить, это то, что писать return console.log(...); довольно бессмысленно.
Как, кстати, и писать return alert(...). Дело в том, что обе эти функции всегда возвращают undefined.
По поводу самой задачки передаем слово Диме:
В первом варианте функции законсольложится undefined, так как объявление (но не присвоение значения) переменной а поднимется вверх своей области видимости (т.н. hoisting).
Во втором варианте получим ошибку: a is not defined..., так как при объявлении переменной при помощи let hoisting'а не происходит.
Кстати, что во втором случае выбросит ошибку, внимательные читатели могли знать не только вбив это в консоль, но и просто внимательно прочитав разбор к #Задачка2
Пора начинать разговаривать про прототипы)
Тема важная, но начнем мы с абсолютно ламерского вопроса (#Задачка6)
Что выведется в консоль?
Ответы можно не присылать, но если у вас возникли сложности, то йоу, пора учить js)
Тема важная, но начнем мы с абсолютно ламерского вопроса (#Задачка6)
var person = {
name: 'Yura',
born: 1990
}
person.__proto__ = {
age: function() {
return 2018 - this.born;
}
}
person.age = function() {
return 2018 - this.born + ' лет';
}
console.log( person.age() );Что выведется в консоль?
Ответы можно не присылать, но если у вас возникли сложности, то йоу, пора учить js)
Ответ к #Задачка6 хорошо сформулировал Василий:
Вернется
Эта задачка проверяет знание очень простой вещи: прототипная связь и все эти цепочки начинают работать, когда мы обращаемся к свойству объекта, а этого свойства у объекта нет.
Нет никакой разницы между методами и просто свойствами, потому что метод — это самое обычное свойство объекта, свойство, в которое записана функция.
Вернется
"28 лет", так как у person есть [собственный] метод age, в прототип никто даже не полезет)Эта задачка проверяет знание очень простой вещи: прототипная связь и все эти цепочки начинают работать, когда мы обращаемся к свойству объекта, а этого свойства у объекта нет.
Нет никакой разницы между методами и просто свойствами, потому что метод — это самое обычное свойство объекта, свойство, в которое записана функция.
#Задачка7
Сегодня будет задачка похардкорнее, хоть и не на прототипы)
Ее вариацию когда-то дали моему знакомому на собеседовании в Яндекс. Серега, привет :)
Нужно написать реализацию функции
Дописывать можно не только внутри функции, но и вокруг.
Сегодня будет задачка похардкорнее, хоть и не на прототипы)
Ее вариацию когда-то дали моему знакомому на собеседовании в Яндекс. Серега, привет :)
Нужно написать реализацию функции
f таким образом, чтобы корректно работал следующий код:function f() {
...
}
console.log( f()()() === 3 ); // true
console.log( f()()() === 6 ); // true
console.log( f()()() === 9 ); // true
Дописывать можно не только внутри функции, но и вокруг.
По присылаемым ответам вижу, что не очень понятно условие, ок, уточняю
Дополнение к #Задачка7
Решение должно быть в общем виде и учитывать окружающую реальность)
То есть код должен быть таким, чтобы это сработало и так:
и так:
Дополнение к #Задачка7
Решение должно быть в общем виде и учитывать окружающую реальность)
То есть код должен быть таким, чтобы это сработало и так:
console.log( f()() === 2 ); // true
console.log( f()() === 4 ); // true
console.log( f()() === 6 ); // true
и так:
console.log( f() === 1 ); // true
console.log( f()() === 3 ); // true
console.log( f()()() === 6 ); // true
