Каковы технические ограничения для объявления, возвращающего значение своей переменной?

1

Почему декларации не возвращаются? Есть ли для них техническая причина?

Выгода, если декларация вернула значения их переменных, заключалась бы в том, что я мог бы написать что-то вроде:

while((var next = generator.next())) doSomething(next);

Из-за спецификации мне нужно объявить следующее в области, которой она не принадлежит.

(Примечание: где-нибудь лучше задать этот вопрос? Возможно, этот вопрос спорный, а не только технический.)

  • 0
    Насколько я знаю, они возвращают значение, иначе вы не сможете сделать a = b = c = 5
  • 1
    «Из-за спецификации мне нужно объявить следующее в области, к которой оно не относится». Вы можете использовать область видимости блока, см. Предотвращение закрытия JavaScript от наследования области видимости
Показать ещё 1 комментарий
Теги:

2 ответа

3
Лучший ответ

Этот вопрос дублирует значение, возвращаемое назначением, хотя ответа на него не так много, как будто это так, потому что оно было указано как (как неутешительно). var не является частью выражения.

Но так как вы спрашиваете о в while цикл, я хотел бы предложить эту альтернативу:

for(let next; next = generator.next();) doSomething(next);
  • 0
    var даже не имеет смысла как часть выражения. В любом случае это будет выведено в область действия функции.
  • 0
    Но большинство языков этого не сделают, это будет частью области видимости цикла. С помощью Javascript мы склонны писать код, который был бы гипотетически верным на других языках, даже если он не имеет смысла в JS. Это просто делает код более разумным, IMO.
Показать ещё 3 комментария
1

Мне нужно объявить следующее в области, которой она не принадлежит.

Вы можете использовать область блока для выполнения задач, где ранее определенное объявление переменной сохранит исходное значение, назначенное вне области блока

const next = "abc";

const doSomething = prop => console.log(prop);

{
  let next = 10;
  while (next = --next) doSomething(next)
}

console.log(next); // '"abc"'
  • 0
    Хорошая точка зрения! У меня немного лишние фигурные скобки, но это полностью решит мою проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню