Pull to refresh

Comments 26

Замыкание — это комбинация функции и её лексического окружения. В нашем примере замыкание — это функция outer().
Не совсем: в вашем примере замыкание — это функция shout() плюс всё то, что она прихватила из окружения. outer() как раз ничего снаружи не захватывает.
При использовании в похожей ситуации обычной функции, this имело бы значение undefined, что привело бы к выводу NaN.

this имело бы ссылку на window, а не undefined. и да, this.x ==> window.x было бы undefined, а ++(undefined.x) далобы NaN
Неточность автора несёт ещё одну ошибку: если бы this === undefined, то this.x вызвало бы runtime ошибку
Видимо имелся в виду строгий режим. При использовании «use strict» как раз undefined будет.
Если значение переменной в процессе выполнения программы не меняется, используйте const вместо let.

Следует упомянуть, что const — это лишь синтаксический сахар над defineProperty, где есть гетер, но нет сетера.
API IntersectionObserver доступно во всех свежих браузерах за исключением Safari

Работает только в Chrome 51+, Edge 15+, FireFox 51-53
Опера, Сафари и ИЕ не поддерживают это чудо. Но конечно же, это не мешает использовать его во всех остальных.
Все хорошо и доступно, но резанул глаз один момент: в статье которая учит «голому» JavaScript увидеть отсылку к написанному пакету:
const resizeDebounce = debounce(() => {
// Код для обработки события изменения размера }, 200);
window.addEventListener('resize', resizeDebounce);


И в разделе про чистоту кода пример конечно чистый, но с ходу сложен для понимания.

А так интересная статья, кое что даже нового узнал.
UFO just landed and posted this here
Стремиться к framework agnostic стоит в приложениях со сложной бизнес-логикой, вынося её в «POJSO/F», старые добрые js объекты и функции, дергая их из точек интеграции с фреймворком, оставляя внутри них только фреймворк-специфичный код.
// У каждого объекта есть прототип, от которого он наследует свойства и методы

Мне кажется, что это создает ложную аллюзию с другими языками.
Прототип в объекте 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 вместе со стрелочными функциями очень режет по глазам
Capturing — захват
Interception — перехват

если бы меня спросили на русском про перехват события, я бы тоже не понял о чем.
А какже TypeScript? Почему им пренебрегают((

ЗЫ. Спасиба за перевод,

Наверное потому, что он в будущем станет неактуальным, как в своё время CoffeeScript

Я в этом сомневаюсь — тайпскрипт это как проблески разума в мире безумия js. Не зря ведь из него переняли кучу всего в стандарт…
UFO just landed and posted this here
Вопрос №11. Как использовать JavaScript для улучшения производительности веб-страниц?
При такой постановке вопроса правильный ответ: «Не использовать JavaScript», т.к. улучшить производительность он точно не сможет =)

Более корректным будет вопрос: «Как использовать JS, чтобы не сильно ухудшить производительность веб-страницы?»

На самом деле нет. JS как раз ускоряет работу и улучшает пользовательские ощущения.
Во-первых,JS позволяет подгружать данные вместо загрузки всей страницы целиком.
Во-вторых, во время подгрузки приложение продолжает работать, и например, с помощью анимации, можно ещё сократить психологическое время до отображения результата.


Это только два простых варианта, ещё есть много чего, так что, толстый клиент — это правильно.

Вопрос был про производительность веб-страниц.
И ответ на него — действительно не использовать js. Достаточно у себя в браузере его отключить и удивиться скорости работы.
Например, если на странице появляется календарь, у пользователя должна быть возможность пользоваться им без мыши, в частности — с помощью клавиш-стрелок. А именно, стрелки перехода влево и вправо можно использовать (при условии, что в одной строке экранного отображения календаря выводится семь дней) для перехода по дням, а клавиши для перехода вверх и вниз — для переключения между неделями.


Интересно, статья написана лет 10 назад? Сейчас огромный объем траффика на сайтах — мобильный, откуда там у пользователя стрелки???
Похоже на совет из 90-ых.
use strict, prototype, let, const, стрелочные функции…

МочА — крутой инструмент, наверное, хотя js же тоже крутой язык...

Но даже несмотря на его невероятную распространённость, и профессионалам в области JS всегда будет чему поучиться.

Почему это не в разделу юмор? Вы серьезно считаете, что человек может называть себя "профессионалом в области JS", если он не знал всего этого ещё тогда, когда был джуном?

1) К 7 вопросу поднятия хороший список примеров JavaScript function hoisting by example
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.

Sign up to leave a comment.