Влияет ли сокращение ES6 на абстракцию?

Добавляет ли использование сокращенного синтаксиса ES6 уровень абстракции и, следовательно, замедляет интерпретатор?

Если вы посмотрите на:

Const myFunction = (myPar) => {...);

Против.

Const myFunction = myPar => ...;

Вы могли бы подумать, что второй пример нужно сначала перевести обратно на «обычный» Javascript, прежде чем его можно будет интерпретировать. Если это так, было бы лучше избежать этого?

.

Если я допустил какие-либо ошибки или этот вопрос слишком тривиален, пожалуйста, поправьте меня.

Я подозреваю, что ваш первый пример должен был быть оригинальным синтаксисом без толстых стрелок?

Daniel Beck 18.12.2020 20:33

Это одно и то же. Единственная причина, по которой () потребуется для аргументов, - это если у вас их несколько. Редактировать: это игнорирует разницу между {} и нет {}

Taplar 18.12.2020 20:34

Обе являются допустимыми функциями, которые делают потенциально разные вещи. Если оба просто возвращают значение, я не понимаю, как вы ожидаете, что производительность будет другой. Также смотрите Что быстрее

VLAZ 18.12.2020 20:34

В любом случае это классический пример преждевременной оптимизации; если требования вашего приложения настолько велики, что разница в производительности на этом уровне значительна, вы, вероятно, не захотите работать с javascript в первую очередь.

Daniel Beck 18.12.2020 20:35

Имейте в виду, что необходимо подчеркнуть, что это не стенография. Метод толстой стрелки не эквивалентен обычному методу. stackoverflow.com/questions/34361379/…

Taplar 18.12.2020 20:38

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

adiga 18.12.2020 20:41

Если вы не используете что-то вроде Babel, перевод не выполняется. Все различные обозначения реализованы непосредственно в компиляторе JavaScript.

Barmar 18.12.2020 20:57

Как вы думаете, почему нужно перевести только второй пример? Обе они являются стрелочными функциями, которые были добавлены в ES6. Так что либо они оба должны быть переведены (и они должны переводиться в одно и то же), либо ни один из них.

Barmar 18.12.2020 20:58

@Rounin Это не то же самое. => { x = 3 } не возвращает неявно результат оператора. => x = 3 делает

Taplar 18.12.2020 21:07

Оооо. Да. Ты прав, @Taplar. Я так привык вручную выполнять все свои возвраты, что совсем забыл о неявных возвратах.

Rounin - Standing with Ukraine 18.12.2020 21:09
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
0
10
86
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Прежде всего, в ES6 нет такого синтаксиса определения функции.

const myFunction = (myPar) => {...); // As there is No closing bracket at the end

И если вы имеете в виду const myFunction = (myPar) => {...}; с закрывающей скобкой.

Тогда ваша следующая функция, которая

const myFunction = myPar => ...;

Похож на первый. Просто у него есть implicit return. Таким образом, 2-я функция имеет неявный возврат, а первой функции потребуется ключевое слово return, чтобы явно вернуть любое значение.

И да, в синтаксисе стрелочных функций ES6 нет такого дополнительного abstraction :) Так что проблем с производительностью нет вообще.

Ответ принят как подходящий
Добавляет ли использование сокращенного синтаксиса ES6 уровень абстракции и, следовательно, замедляет интерпретатор? Вы могли бы подумать, что его нужно сначала перевести обратно в «обычный» Javascript, прежде чем его можно будет интерпретировать.

Нет. Прежде всего, ES6 — это обычный JavaScript, которому уже более 5 лет.

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

Другие вопросы по теме