Comments 26
Замыкание — это комбинация функции и её лексического окружения. В нашем примере замыкание — это функция outer().Не совсем: в вашем примере замыкание — это функция shout() плюс всё то, что она прихватила из окружения. outer() как раз ничего снаружи не захватывает.
При использовании в похожей ситуации обычной функции, this имело бы значение undefined, что привело бы к выводу NaN.
this имело бы ссылку на window, а не undefined. и да, this.x ==> window.x было бы undefined, а ++(undefined.x) далобы NaN
Неточность автора несёт ещё одну ошибку: если бы this === undefined, то this.x вызвало бы runtime ошибку
Если значение переменной в процессе выполнения программы не меняется, используйте const вместо let.
Следует упомянуть, что const — это лишь синтаксический сахар над defineProperty, где есть гетер, но нет сетера.
API IntersectionObserver доступно во всех свежих браузерах за исключением Safari
Работает только в Chrome 51+, Edge 15+, FireFox 51-53
Опера, Сафари и ИЕ не поддерживают это чудо. Но конечно же, это не мешает использовать его во всех остальных.
const resizeDebounce = debounce(() => {
// Код для обработки события изменения размера }, 200);
window.addEventListener('resize', resizeDebounce);
И в разделе про чистоту кода пример конечно чистый, но с ходу сложен для понимания.
А так интересная статья, кое что даже нового узнал.
Мне кажется, что это создает ложную аллюзию с другими языками.
Прототип в объекте JavaScript — это не ссылка на родитель, а скорее ссылка на делегата, в котором можно поискать функции или свойства, если они не найдены в текущих свойствах объекта.
var rabbit = {
jumps: true
};
alert( rabbit.jumps ); // true
alert( rabbit.eats ); // undefined
var eater= {
eats: true
};
rabbit.__proto__ = eater;
// теперь в rabbit можно найти оба свойства
alert( rabbit.jumps ); // true
alert( rabbit.eats ); // true
Прототипы в JavaScript — это скорее не наследование. Это скорее про цепочки делегатов.
При классическом объектном наследовании, получая инстанс класса, мы всегда можем быть уверены, что его свойства родителя проинициализированы, а родитель останется неизменным.
В JavaScript мы можем менять прототип в любой момент, через свойство __proto__ — даже после создания объектов.
В этом материале вы найдёте разбор двенадцати вопросов о JavaScript, на которые нередко не могут ответить даже опытные разработчикиЯ даже боюсь представить, что же тогда в понимании автора представляет из себя не опытный разработчик
function outer() {
let x = 'Web Designer';
function shout() {
alert(`I love ${x}!`);
}
shout(); }
Если значение переменной в процессе выполнения программы не меняется, используйте const вместо let.
Дальше в статье так же можно увидеть использование var вместе со стрелочными функциями очень режет по глазам
Interception — перехват
если бы меня спросили на русском про перехват события, я бы тоже не понял о чем.
ЗЫ. Спасиба за перевод,
Вопрос №11. Как использовать JavaScript для улучшения производительности веб-страниц?При такой постановке вопроса правильный ответ: «Не использовать JavaScript», т.к. улучшить производительность он точно не сможет =)
Более корректным будет вопрос: «Как использовать JS, чтобы не сильно ухудшить производительность веб-страницы?»
На самом деле нет. JS как раз ускоряет работу и улучшает пользовательские ощущения.
Во-первых,JS позволяет подгружать данные вместо загрузки всей страницы целиком.
Во-вторых, во время подгрузки приложение продолжает работать, и например, с помощью анимации, можно ещё сократить психологическое время до отображения результата.
Это только два простых варианта, ещё есть много чего, так что, толстый клиент — это правильно.
Например, если на странице появляется календарь, у пользователя должна быть возможность пользоваться им без мыши, в частности — с помощью клавиш-стрелок. А именно, стрелки перехода влево и вправо можно использовать (при условии, что в одной строке экранного отображения календаря выводится семь дней) для перехода по дням, а клавиши для перехода вверх и вниз — для переключения между неделями.
Интересно, статья написана лет 10 назад? Сейчас огромный объем траффика на сайтах — мобильный, откуда там у пользователя стрелки???
Похоже на совет из 90-ых.
МочА — крутой инструмент, наверное, хотя js же тоже крутой язык...
Но даже несмотря на его невероятную распространённость, и профессионалам в области JS всегда будет чему поучиться.
Почему это не в разделу юмор? Вы серьезно считаете, что человек может называть себя "профессионалом в области JS", если он не знал всего этого ещё тогда, когда был джуном?
2) по поводу
{passive: true}
если не ошибаюсь требуется проверка (псевдокод): var supportsPassive = (function () {
var support = false;
try {
var opts = Object[defineProperty] && Object[defineProperty]({}, "passive", {
get: function () {
support = true;
}
});
root[_addEventListener]("test", function () {}, opts);
} catch (err) {}
return support;
})();
Всплытие событий используется при реализации делегирования событий.
Делегирование событий — это техника, которая использует механизм всплытия событий.
Почему всегда, когда говорят о делегировании, имеют в виду стадию всплытия? Я с таким же успехом могу реализовать делегирование используя стадию перехвата.
Многие современные фреймворки, вроде React
Не самый удачный пример. React — это не фреймворк. Это всего лишь небольшая библиотека для рендеринга и не более. Впрочем как и Polymer.
JavaScript: 12 вопросов и ответов