Комментарии 41
в основном
хм, я такого не встречал уже… лет 8 точно. Где вы таких находите?
Исключительно в блоге компании RUVDS.
Вот тут очень толково и сжато написано если кому надо: learn.javascript.ru/es-modern
Если у вас до сих пор стоит старый Хром, значит у вас что-то сломалось.
А зачем? Последняя версия вышла 5 лет назад. Этот движок уже устарел по любому критерию
dev.opera.com/articles/browsers-modes-engines
А вот тестовые браузеры под Selenium лучше своевременно обновлять, чтобы не было ложных срабатываний на баги, которых у пользователей никогда не будет.
но и различные агрегаторы, например, парсящие ваши SPA
Если агрегатор с более старым браузером может парсить сайт, то проблем нет. А вот даунгрейдить фичи только чтобы ублажить агрегатор, вместо заботы о конечных пользователях — это странный труд.
Я знаю, что GoogleBot использует Chrome 41. Но для меня это повод задуматься о полноценном сервер-рендеринге, а не ограничивать себя в let/const.
если вы работаете на высококонкурентном рынке и пользователь скорее уйдёт к конкурентам чем будет ради вас обновлять браузер
Что-то я не верю в анекдот "один вебмастер не использовал es6, и его продажи удвоились за счет пользователей с завирусованных компьютеров, пользующихся Амиго или Chrome 46". Все-таки у подавляющего большинства пользователей обновления включены.
В целом может быть у подавляющего большинства и включены. Но, как по мне, прежде всего за счёт индивидуальных пользователей. Корпоративный сектор более консервативен по разным причинам и если ваш ресурс ориентирован на него, то, скорее всего, статистика использования браузеров будет отличаться от общемировой или региональной (даже тут специфика есть — если в регионе плохо с Интернетом, трафик дорогой и(или) скорости низкие, то новых версий будет заметно меньше в статистике даже на чисто гиковских ресурсах).
let a = [];
for(let i = 0;i<4;i++){
a.push(function(){
return(i);
});
i++;
}
console.log(a.length);
console.log(a[0]());
console.log(a[1]());
>2
>1
>3
Сделано это, как я понял, для упрощения стандартных действий с циклами — чтобы и замыкать можно было каждый раз на новое значение переменной, и со счётчиками можно было работать как раньше, меняя их вручную.
этот же код с var работает совсем некорректноC var он работает неудобно, но понятно — функции в массиве замкнуты на одну и ту же переменную и обе возвращают одно и то же значение.
var a = [];
for(var i = 0;i<4;i++){
a.push(function(i){
return function(){
return i;
};
}(i));
i++;
}
console.log(a.length);
console.log(a[0]());
console.log(a[1]());
Благодарю за пример, познавательно) Но зачем лишний раз инкрементить i? Сразу не заметил и не мог понять прикола. А так да, вы пропускаете лишнюю итерацию, все логичноТолько сейчас понял, что не объяснил-таки, в чём смысл примера. Смысл в том, что переменная цикла, вроде как, одна (i), но функция, создаваемая в теле цикла, в разных экземплярах функции видит разное значение. При этом, если изменить её в теле цикла, то в условии выхода проверится тоже изменённое значение, как будто это, всё-таки, одна и та же переменная. В итоге, совершенно непонятно без специальных раскопок, что такое эта i в разных местах — в теле цикла и в трёх частях параметров оператора for.
Создавать переменную с одинаковым именем для разных задач в рамках одного и того же сегмента кода — плохая практика, и ее не сделать лучше никаким образом. Не стоило и пытаться, я считаю.
Var, let или const? Проблемы областей видимости переменных и ES6