Добавляет ли использование сокращенного синтаксиса ES6 уровень абстракции и, следовательно, замедляет интерпретатор?
Если вы посмотрите на:
Const myFunction = (myPar) => {...);
Против.
Const myFunction = myPar => ...;
Вы могли бы подумать, что второй пример нужно сначала перевести обратно на «обычный» Javascript, прежде чем его можно будет интерпретировать. Если это так, было бы лучше избежать этого?
.
Если я допустил какие-либо ошибки или этот вопрос слишком тривиален, пожалуйста, поправьте меня.
Это одно и то же. Единственная причина, по которой () потребуется для аргументов, - это если у вас их несколько. Редактировать: это игнорирует разницу между {} и нет {}
Обе являются допустимыми функциями, которые делают потенциально разные вещи. Если оба просто возвращают значение, я не понимаю, как вы ожидаете, что производительность будет другой. Также смотрите Что быстрее
В любом случае это классический пример преждевременной оптимизации; если требования вашего приложения настолько велики, что разница в производительности на этом уровне значительна, вы, вероятно, не захотите работать с javascript в первую очередь.
Имейте в виду, что необходимо подчеркнуть, что это не стенография. Метод толстой стрелки не эквивалентен обычному методу. stackoverflow.com/questions/34361379/…
В чем разница между ними? Вы спрашиваете о скобках вокруг параметра или о неявном возврате во второй функции? И обе они являются стрелочными функциями. Нет пресета, в который транспилируется только один из них.
Если вы не используете что-то вроде Babel, перевод не выполняется. Все различные обозначения реализованы непосредственно в компиляторе JavaScript.
Как вы думаете, почему нужно перевести только второй пример? Обе они являются стрелочными функциями, которые были добавлены в ES6. Так что либо они оба должны быть переведены (и они должны переводиться в одно и то же), либо ни один из них.
@Rounin Это не то же самое. => { x = 3 } не возвращает неявно результат оператора. => x = 3 делает
Оооо. Да. Ты прав, @Taplar. Я так привык вручную выполнять все свои возвраты, что совсем забыл о неявных возвратах.
Прежде всего, в 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, — это не исходный код как текст, и нет перевода из одного формата в другой. Интерпретатор анализирует текст в некое промежуточное представление, а затем выполняет его. Все различные способы определения функции анализируются непосредственно в одном и том же промежуточном представлении (за исключением флагов для незначительных семантических различий, которым необходимо следовать при выполнении).
Я подозреваю, что ваш первый пример должен был быть оригинальным синтаксисом без толстых стрелок?