2016-05-14 2 views
1

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

const [ , two ] = [ 1, 2 ] 

То же самое нельзя сказать о сигнатурах функций - следующий код не будет разбирать, так как ведущая запятая в подпись не действительна:

function ditchFirstArgument(, second){} 

Зачем мне нужны ссылки для ведущих параметров в выражениях функций ES6?

+4

какой ответ вы ищете? «Потому что язык этого не позволяет»? Если вы просите причины для * проектных решений *, то это не очень хорошее место (потому что большинство людей здесь не работают над ECMAScript) –

+1

это привело бы к чрезвычайно специализированным функциям с чрезвычайно плохим повторным использованием.и еще хуже: назначение этих функций было бы кошмаром: D – rand

+0

Привет, Феликс, я ценю, что большинство людей не разрабатывали Javascript, но все же думал, что Stack Overflow будет хорошим местом, чтобы получить техническое объяснение того, почему язык не будет позвольте мне сделать это. Я полностью ожидаю, что многие пользователи SO не получат ответа - это прекрасно :) – Barney

ответ

3

Зачем нужны ссылки для ведущих параметров в выражениях функций ES6?

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

Если вы действительно хотите сделать это (но почему?), Вы можете написать его как

function ditchFirstArgument(...[, second]) {} 

или, по крайней мере, вы будете иметь возможность в какой-то будущей версии ES; см. https://github.com/tc39/ecma262/commit/d322357e6be95bc4bd3e03f5944a736aac55fa50. Это уже похоже на поддержку в Chrome. Между тем, лучшее, что вы можете сделать, это

function ditchFirstArgument(...args) { 
    const [, second] = args; 

Но почему спецификации не позволяют элизия параметров?

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

+1

Предостережение: если вы используете lodash или подчеркивание, вы можете использовать '__' (два символа подчеркивания), чтобы он не перекрывал глобальную переменную' _' (одно подчеркивание). – Sukima

1

Я считаю, что это общий шаблон назвать неиспользуемые переменные с подчеркиванием:

function ditchFirstArgument(_, second) { /* ... */ } 

Хотя это не помешает вам на самом деле с помощью этой переменной (например, в Go), это, кажется, довольно простой обходной путь ,

1

Roman's insight от Go полезно, но неуместно JS, где маркер _is a valid reference, обычно используемый в Underscore и более поздних Lodash библиотек.

Даже если это приемлемо, вам нужно создать и избежать ссылок на dud для каждого неиспользуемого аргумента, что не является идеальным.

Однако destructure a function argument в пустой объект, что фактически аннулирует параметр без ссылки.

function take_third({}, {}, third){ 
    return third 
} 
Смежные вопросы