Как стать автором
Обновить

Комментарии 41

А я долго гадал думал, зачем в таком большом количестве вы выбрасываете переводы так себе статей (хотя некоторые интересны). Теперь то понятно — пиарить совой проект обучения web проганью, вот только этих сервисов развелось как грязи в последнее время, чему то там конечно обучают, но только минимальным основам и так себе (Кто умеет, тот делает; кто не умеет, тот учит — пословица такая). В итоге на итак перегретый рынок it разработки выплёскиваются люди прошедшие пару курсов с завышенным чсв и требованием 1000$ в месяц и красной ковровой дорожки чтобы просто прийти на собеседование (к сожалению это гиперболизированная но всё же реальность). Вообщем печалька.
Пусть выплескиваются. За минувший год у меня на собеседовании были десятка таких «талантов» с уровнем зарплатных ожиданий от *совсем мало* (студент на парт-тайм) до *офигеть сколько* (вуз закончил или даже не начинал) тысяч. Одному, пришедшему с претензией на senior, предложили junior-позицию за вменяемую сумму. Согласился, до сих пор с нами работает.
А изначальную позицию закрыли опытным и сильным девелопером. Стоит он дорого, но такие люди на контрасте с общей массой начинают еще больше цениться.
По-моему с бэктиком что-то не то
https://gyazo.com/1f33b7a3cd6a6128a63eee0069e09b5d
А как насчет поддержки ES6 устаревшими браузерами? Тот же IE9, который является последней версией для Висты (которая до сих является поддерживаемым ОС), сможет выполнить код? Часто заказчики вообще требуют поддержки IE6.
Ладно IE6 или IE9. Многое из описанного не поддерживается и в IE11 о чем почему-то умолчали в статье
А что-то таки поддерживается уже в IE 11?
let, const. Таблица
Вам помогут полифилы.

Полифиллы, транспиляция.

https://babeljs.io/
Часто заказчики вообще требуют поддержки IE6.

вокруг вас там черти с вилами не бегают?
Слава Богу, наконец-то кто-то написал псто про новые фичи в ES6.
25 октября 2016
Слава Богу, наконец-то кто-то написал просто про новые фичи в ES2015.
псто !== просто
забудьте var, используйте let и const.

Между тем, node.js team пока старается избегать их в местах, критичным к скорости выполнения (например, в циклах). https://github.com/nodejs/node/pull/8873 и https://gist.github.com/Salakar/6d7b84f7adf1f3bc62a754752a6e5d0e

Со времен JS-движки оптимизируют под новый стандарт.
Но как? В байткоде let плодит замыкание, у него нет других вариантов кроме как сделать замыкание, а это не бесплатная вещь. Фактически такие статьи сейчас предлагают завернуть любой цикл таким образом:
for(var i = 0; i < length; i++)
  (function(i){ 
    тело
  })(i);

Это несомненно решает проблему когда в теле оказывается ассинхронный код, единственное что могут изобрести js-движки — jit оптимизацию, которая проверит что код синхронен и тогда заменит let на var (логику поведения). Но что если мне действительно надо в ассинхронном коде использовать последнее значение i?
ES6 принёс очень много загадочных мест.
Да, над этим работают
https://docs.google.com/document/d/1EA9EbfnydAmmU_lM8R_uEMQ-U_v4l9zulePSBkeYWmY
переменная "протекает" в другие блоки кода

протекает наружу

Всега было "поднимается" ну или "всплыввает", зачем вводить новое понятие да еще и такое запутанное.
Все же четко: объявление переменной "поднимается" в начало области видимости (функции). И не нужно объяснять почему переменная настолько вредная, что "проникает" в другие блоки

Видимо чтобы вызвать ассоциацию с тем, что протекает. По трубам.
В целом, очень даже ничего.
Некоторые фишки очень даже понравились.Особенно «class, constructor».
Но вот это как-то не очень:

ES6
function settings() {
  return { display: { color: 'red' }, keyboard: { layout: 'querty'} };
}

const { display: { color: displayColor }, keyboard: { layout: keyboardLayout }} = settings();

console.log(displayColor, keyboardLayout); // red querty

Это, на мой взгляд, просто пример неуместного использования деструктуринга, строка получилась очень длинной и плохо читаемой, при этом вариант settings.display.color гораздо читабельнее в данном случае.
Но это не потому что деструктуринг плох, а потому что надо в меру фичи использовать.
То же можно сказать и про [...array1, ...array2, ...array3]. Лучше бы + починили (ну или какой-нибудь ++ добавили), если concat не нравится.

Да вроде нормально, если отформатировать по строкам
Удивительно дело.

Модные и современные веб-языки и технологии проходят тернистый путь развития совершенно без учета граблей, через которые пришлось пройти в свое время традиционным универсальным языкам и платформам.

В C++ изначально было сделано по уму — friend-функции
А вот дальше пошло хуже, но хоть как-то развивалось:
  • в Delphi «протекали» private-поля внутри модуля, потом протечки залепили с помощью strict protected;
  • в Java protected-поля протекают внутри пакета,
  • но потом появился ее близнец C#, в котором protected не протекает, а для контролируемых протечек внутри сборки придумали internal.

На мой взгляд, когда private var виден наружу, это именно «протечка», лучше называть вещи своими именами.
Ок, придумали, let и const теперь. Неясно, почему это нельзя было придумать сразу, с учетом опыта других языков.

Тем более путаница ключевых слов — если с const все понятно, то разницу между var и let нужно держать в голове, или гуглить. Опять же, неужели опыт других языков не учит, где тоже полно схожих ключевых слов с разной семантикой.
Неясно, почему это нельзя было придумать сразу, с учетом опыта других языков.

Javascript появился в 1995 году, опыта других языков типа Java и тем более C# еще не было.

Здесь было немного сарказма про «модные веб-языки», но тем не менее:
  1. в 1995-м появился LiveScript, а не JavaScript
  2. Сколько раз его можно было переделать, пока браузеры не стали массово исполнять JS как стандарт де факто?
  3. в 1995-м уже давно был C++, и вовсю была Delphi, было на что ориентироваться
  4. Java вышла в 1995-96-м

Так что по ходу развития JS было на что ориентироваться.
Поэтому и неясно, почему такие детские болезни, как var в JS, дожили аж до 2016.

Ну когда смогли, тогда и сделали.


Лучше поздно, чем никогда, правда?

Все верно, лучше поздно, чем никогда.

Но этот и множество других примеров в веб-технологиях удивляют — как будто их разработчики занимались разработкой где-то на Альфа Центавра, иной раз кажется, что ну совершенно без учета опыта индустрии.

А теперь если что-то и исправляется, то преподносится как откровение (а в индустрии в целом это уж 10-20-30 лет как решено).

Проблема в том, что веб давно стал очень актуальным, и дальше — больше (но — со всеми своими детскими болезнями), и было бы интересно понять причины, предпосылки сложившегося состояния дел именно в веб-отрасли.

А так, считаю, что и традиционным языкам есть чему получиться у того же JS (например, доступ к элементами класса как словарю «ключ — значение» — по сути, это рефлексия, встроенная в язык, а не в библиотеки платформы).

Ответ на первой картинке в посте.


С 2000 года почти 10 лет никто языком не занимался вообще, браузеры реализовывали функциональность кто во что горазд.
Потом понадобилось некоторое время, чтобы разобраться с проблемами и прийти к какому-то удовлетворительному решению.

>С 2000 года почти 10 лет никто языком не занимался вообще

Была попытка неудавшаяся протащить ООП в JavaScript в ES4.

Так что работа велась. ;-)
в Java protected-поля протекают внутри пакета,

Чем это плохо?
Неясно, почему это нельзя было придумать сразу, с учетом опыта других языков.

Может потому что он был написан в 1995 за 10 дней?
Тем более путаница ключевых слов — если с const все понятно, то разницу между var и let нужно держать в голове, или гуглить.

Убрать поддержку var нельзя но let внедрять нужно. Как бы вы тут поступили?
После первого примера дальше даже читать не стал. Область видимости для var — функция(она же объект). Почему вернуло undefined? Да потому что переменная объявляется внутри функции независимо от наличия условия, оно влияет только на присвоение значения этой переменной.
В примере с классами для ES5 не слишком ли усложнена обертка? Можно ведь и так написать:
var Animal = function(name){
  this.name = name;
  this.speak = function(){
    console.log(this.name + ' makes a noise.');
  }
}
Это не одно и то же. Там метод вынесен в прототип.
Ок, просьба не пинать больно, а что нам дает замыкание в функцию по сравнению с такой записью?
var Animal = function(name){
  this.name = name;  
}
Animal.prototype.speak = function(){
    console.log(this.name + ' makes a noise.');
}
А вот на этот вопрос у меня нет хорошего ответа.
Вроде бы на примере с наследованием становится ясно что с классами проще, но опять же
var lion = Object.create(new Animal('Simba'))
lion.speak = function(){
	Animal.prototype.speak.call(this);
	console.log(this.name + ' roars.');
}

lion.speak(); // Simba makes a noise.

Тоже нормально читается. В общем не отпускает чувство что пример нарочно усложнен для контраста, «как все клево стало».

В вашем первом примере на каждый новый экземпляр Animal будет создан свой инстанс метода speak.


Если вынести метод в прототип, то он будет один на все экземпляры. В теории, это сэкономит вам немного памяти, если объектов много.

В той записи, которую вы прокомментировали, метод вынесен в прототип.
Timoschenko «Но вот это как-то не очень» — согласен (голосовать не могу :) )
Как раз сегодня заинтересовался поддержкой ES6 в браузерах, чтобы избавиться в проекте от Babel. Для этой цели запилил небольшой тестик, который проверяет поддержку фич ES6 в вашем браузере. Тыц
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории