Pull to refresh

Comments 36

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Знаете, это очень спорный вопрос. Лично я отношусь к babel в 2016 году как к чему-то типа компилятора для C++, т.е. как к неотъемлемой части разработки. Да, можно долго спорить, использовать его или нет, и все такое, но новичку уж проще один раз настроить бебель, чем постоянно смотреть, что какими браузерами поддерживается. Более того, почти наверное он насмотрелся на примеры на том же реакте, так что babel уже можно считать установленным (вряд ли кто-то начинает изучение js с сортировок массива, а какие-то reduce так вообще нужны один раз на 5 лет).

Однако ориентироваться под старые браузеры и писать для начинающих статьи, ориентируясь на старые стандарты — это как изучать 3d max, только взять не актуальную версию, а, скажем, вторую или третью.

Ну и, наконец, при этом — главное — рассказывать о методах, появившихся в es6, но не использовать arrow-нотацию из того же es6 как минимум странно. А то, что этот стандарт до сих пор поддерживают не все браузеры полностью — уже проблема браузеров.
UFO just landed and posted this here
UFO just landed and posted this here
Так из какой коробки? js на странице в броузере? В расширении браузера (три контекста — background, popup, content, под лисой еще bootstrap — причем в лисе это как три разных броузера)? Вебворкеры? Или мы на сервере под нодой? Или мы на постгресе в plv8? или мы в ноде но на этапе сборки проекта (webpack). Я уже молчу про экзотику типа фриды.

что люди задающие такие вопросы, будут использовать Babel для преобразования ES 6? Честно честно?

Если ответят бабелем — то многие будут. Вопросы ведь такие далеко не всегда от глупости задаются — кто то только вливается, кто то вообще только начинает программировать. Это все равно что смотреть на иностранца и думать что он тупой только потому что плохо разговаривает на чужом ему языке. Так и эти вопрошающие — для многих из них это просто пока еще незнакомая среда с неизвестными им правилами (общения, обучения, добывания информации)
Javascript работает не только в браузерах
Тем не менее, согласитесь, упоминания того, что данные методы являются стандартом (да и сам код примеров) ES6 не хватает.
Будут. Стрелочные функции !== лямба-функции.
UFO just landed and posted this here
Позволю себе скинуть ссылку, там достаточно подробно написано.
https://learn.javascript.ru/es-function

P.S. хабр мне не дает сделать ссылку активной.
UFO just landed and posted this here
> «И вы меня конечно простите, но в любом случае для меня MDN является ресурсом куда авторитетнее чем javascript.ru. Ребята из Mozilla участвуют в разработке стандарта языка (EcmaScript), и я верю что они лучше знают, что можно назвать „лямбдой“.»
Аналогично, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

> «Можете привести цитату? Может я внимательно прочитал?»
Рассказываются различия между короткой формой и обычной:
https://learn.javascript.ru/es-function#функции-стрелки-не-имеют-своего-this
https://learn.javascript.ru/es-function#функции-стрелки-не-имеют-своего-arguments

И цитата:
«Не имеют своих this и arguments, при обращении получают их из окружающего контекста.
Не могут быть использованы как конструкторы, с new.»

> «Я лично тоже придерживаюсь мнения, что лямбды это просто сокращенная версия анонимной функции, чем и является arrow function.»
Как писал Apathetic, поэтому стрелочные функции !== лямба-функции, т.е. не просто сокращенная версия.
UFO just landed and posted this here
> «Как ваша цитата подтверждает утверждение, что стрелочная функция это не лямбда? То что вы приводите касается исключительно лексического this и коллекции arguments, по-вашему их отсутствие как-то влияет на то лямбда это или нет, вы это серьезно?»
Лямбдой была, лямбдой и осталась. Вы хоть понимаете, что я пытался донести? Всего лишь одну вещь — какие есть различия между стрелочной записью и обычной.

> «Вы еще ни разу не подкрепили свое утверждение хотя бы одним источником – одно голословное утверждение. Я уже привел как минимум три ссылки, где явным образом написано что arrow function === lambda и переняли это из C#, но вы все равно продолжаете глупо спорить.»
Мне кажется, или мы говорим о разных вещах? И наверняка о разном смысле различия, если вам так угодно. Список различий я вам привел.

А теперь сначала. Что arrow function, что lambda, anonymous function — это все лямбды. Стрелочная запись отличается по функционалу от полной записи лямбды. Поэтому использование стрелочной записи !== использованию обычной записи.

Цитируя самого себя:
> «Как писал Apathetic, поэтому стрелочные функции !== лямба-функции, т.е. не просто сокращенная версия.»
Понимая, то, как вы на это смотрите, фраза абсолютна не правильная. В данном случае, стрелочные функции === лямба-функции. Текстом в цитате, я подразумевал под 1 — короткую запись, под 2 длинную.

> "… Перестаньте жить в информационном вакууме и читайте хоть немного больше чем javascript.ru, на котором кстати по вашей ссылке ни слова про лямбды."
Источник не авторитетный, согласен. Тут уж извините, забыл где нахожусь и по привычке вставил первую ссылку. Кстати, которая полностью подтверждает мои суждения. Тем не менее, ссылку на реальный источник, в котором сказано ровно тоже самое — я вам предоставил. Остальной опус в мой адрес считаю, как минимум, неуместными предрассудками.

UFO just landed and posted this here
> Мой вопрос про разницу лямбд и arrow function был скорее чтобы навести автора комментария на правильное решение, а не чтобы тратить столько времени на бесполезные споры совсем о других вещах.

Согласен. Я неправильно понял вашу мысль, подумав, что Apathetic имел ввиду разницу между короткой записью и длинной.
чтобы навести автора комментария на правильное решение
И навели. Совместно с alexkunin вы помогли мне понять, что я был не прав. Спасибо =)
Лямда — это анонимная функция, если упрощённо говорить, да.
Но стрелочные функции тут при чём? Вот вам пример стрелочной фунции, которая не является при этом анонимной:
var f = () => console.log('hello');

А вот пример анонимной:
setTimeout(() => console.log('hello'), 1000);
UFO just landed and posted this here
Вы правы, это действительно переменная, в которой хранится ссылка на функцию. Но у меня такое ощущение, будто вы думаете, что объявление функции через function declaration происходит как-то по-другому. Точно так же создаётся переменная, в которой сохраняется функция.
Функция — это объект, она принципиально не может храниться в переменных, и как вы её не объявляйте — через expression или declaration, в конечном счете разницы нет — интерпретатор создаёт переменную, в которой сохраняет ссылку на функцию.
UPD. Мне нужно время.
UFO just landed and posted this here
UFO just landed and posted this here
Именно поэтому я эту часть и удалил.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Согласно спецификации, если нет инициирующего значения, в качестве него берется нулевой элемент, а перебор массива начинается с первого. В v8 и SpiderMonkey это работает согласно спецификации. Если действительно с этим где-то есть проблемы, то поправлю.
UFO just landed and posted this here
Спасибо за замечание, про пустой массив как то не подумал, поправил
Если это статья для новичков — где тут подробное объяснение, что происходит в каждой строчке?

var sum = [].reduce((a, b) => a + b);

Я, например, вот на этом месте уже начал сомневаться. Где результат данной операции с примером? Почему именно так, а не иначе?

Ну и т.д.
Использую underscore для работы с массивами.
Sign up to leave a comment.

Articles