javascript-tutorial/ru.javascript.info

[Баг]: Неточный ответ в задаче "Функция внутри if"

s0nought opened this issue · 1 comments

Описание

Условие:

Посмотрите на код. Какой будет результат у вызова на последней строке?

let phrase = "Hello";

if (true) {
  let user = "John";

  function sayHi() {
    alert(`${phrase}, ${user}`);
  }
}

sayHi();

Ответ:

Результатом будет ошибка.

Функция sayHi объявлена внутри if, так что она живёт только внутри этого блока. Снаружи нет sayHi.

В строгом режиме - ошибка.

strict

Без - нет.

non-strict

Как воспроизвести?

  1. Открыть https://learn.javascript.ru/task/function-in-if
  2. Скопировать код задачи
  3. Открыть новую вкладку с DevTools на Console
  4. Вставить из буфера обмена и нажать Enter

Браузер

Chrome 125.0.6422.113

Firefox 126.0.1

Все примеры кода в учебнике подразумевают использование строгого режима в них (за редкими исключениями, но тогда есть пояснения к таким примерам). Об этом написано в самом начале, в статье «Строгий режим — "use strict"». Однако, поскольку это не первая Issue конкретно по этой задаче, добавляю уточнение.

image