@Hardelele
Свитчер со Spring на React

Зачем нужен блок инструкций без управляющей инструкции?

Вопрос возник в ходе изучения кода React.

Вот пример:
var currentExtraStackFrame = null;
function setExtraStackFrame(stack) {
  {
    currentExtraStackFrame = stack;
  }
}


Зачем нужна подобная конструкция? Есть ли какой-то смысл объявлять блок инструкций без управляющей инструкции?
  • Вопрос задан
  • 127 просмотров
Решения вопроса 2
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
В изначальных исходниках там TypeScript. Вы смотрите уже скомпилированный код. В исходниках местами все обернуто в разные условия, завязанные на__DEV__:
export function setExtraStackFrame(stack: null | string): void {
  if (__DEV__) {
    currentExtraStackFrame = stack;
  }
}

Когда происходила сборка кода, который вы смотрите, вероятно __DEV__ был true, условие было опущено, т.к. оно всегда выполняется, а скобки остались как артефакт. Скорее всего транспилятор TS не проверяет весь контекст, и чтобы ничего не сломать случайно, оставляет скобки на своих местах.
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Любой блок создает лексическую область видимости (переменные объявленные с помощью let и const видны только в пределах своего блока).

Очень похоже, что такой код уже обработан какими либо инструментами.
Допустим в исходном коде было что-то вроде:
var currentExtraStackFrame = null;
function setExtraStackFrame(stack) {
  if (process.env.NODE_ENV === 'production') {
    currentExtraStackFrame = stack;
  }
}
В процессе сборки process.env.NODE_ENV было заменено на 'production', а так как 'production' === 'production' - это всегда истинное условие, то от if можно избавиться, оставив только его тело, вот только от блока при этом инструменты не избавляются, так как можно сломать видимость переменных.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
var currentExtraStackFrame = null; // это нужно, чтобы не словить предупреждение в консоль undefined variable/property при обращении к свойству currentExtraStackFrame
// этим методом вы задаете какое-то значение для свойства currentExtraStackFrame, если его нужно привести в какое-то не null значение (или вернуть в null - значение по умолчанию).
function setExtraStackFrame(stack)
{
  // if() тут может была лексема if, можно просто ее закомментить и не убирать скобки, чтобы git не анализировать их исправление, и так будет работать
  {
    currentExtraStackFrame = stack;
  }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы