all-threads-bot

Frontender`s Spectre

JavaScript | Практика #177 | Функции | ★★★☆☆

19 апреля 2023 г., 08:06

<p><strong>Ответ: <code>'four'</code>.</strong></p> <p>Блок <code>finally</code> всегда выполняется после блоков <code>try/catch</code> &mdash; даже в том случае, если в них есть операторы <code>return</code>.</p> <p>Последний оператор <code>return</code> всегда &laquo;побеждает&raquo; другие. Не тот, который находится последним в теле функции, что было бы безумием, а тот, который выполняется последним. И речь тут идёт о такой же &laquo;победе&raquo;, которую одерживает последняя операция присвоения значения одной и той же переменной. При этом те операции присвоения значения, которые не были выполнены, мы не учитываем.</p> <p>На самом деле, спецификация <code>return</code> очень похожа на спецификацию операции присвоения значения переменной. Так, <code>return</code> присваивает вызову функции некий результат. Поэтому следующий вызов <code>return</code> перекрывает то, что было возвращено после предыдущего вызова <code>return</code>.</p>

<p><strong>Ответ: <code>'four'</code>.</strong></p> <p>Блок <code>finally</code> всегда выполняется после блоков <code>try/catch</code> &mdash; даже в том случае, если в них есть операторы <code>return</code>.</p> <p>Последний оператор <code>return</code> всегда &laquo;побеждает&raquo; другие. Не тот, который находится последним в теле функции, что было бы безумием, а тот, который выполняется последним. И речь тут идёт о такой же &laquo;победе&raquo;, которую одерживает последняя операция присвоения значения одной и той же переменной. При этом те операции присвоения значения, которые не были выполнены, мы не учитываем.</p> <p>На самом деле, спецификация <code>return</code> очень похожа на спецификацию операции присвоения значения переменной. Так, <code>return</code> присваивает вызову функции некий результат. Поэтому следующий вызов <code>return</code> перекрывает то, что было возвращено после предыдущего вызова <code>return</code>.</p>
Ниже представлено пояснение.

Ответ: 'four'.

Блок finally всегда выполняется после блоков try/catch — даже в том случае, если в них есть операторы return.

Последний оператор return всегда «побеждает» другие. Не тот, который находится последним в теле функции, что было бы безумием, а тот, который выполняется последним. И речь тут идёт о такой же «победе», которую одерживает последняя операция присвоения значения одной и той же переменной. При этом те операции присвоения значения, которые не были выполнены, мы не учитываем.

На самом деле, спецификация return очень похожа на спецификацию операции присвоения значения переменной. Так, return присваивает вызову функции некий результат. Поэтому следующий вызов return перекрывает то, что было возвращено после предыдущего вызова return.