Pull to refresh

Comments 12

Есть ошибка. Если вызвать функцию определенную с помощью function expression до ее определения, будет TypeError: sayHello is not a function
Ошибки нет, т.к. функция sayHello объявлена через const, а не через var.
С const согласен, не посмотрел пример сам, тогда в описании к примеру, тоже бы написать const.
В описании к примеру функция вида «function expression» приведена с объявлением через var для наиболее общего вида. Если бы статья не была переводом, то в примере исправил бы const на var, но т.к. это не так, то оставим, как есть.
Ну да и ошибка там reference error будет, а не то, что неопределено значение
— Если запустить этот кусок кода в консоли браузера Chrome, то будет выведено: «sayHello is not defined», а это означает, что функция sayHello не определена (не объявлена), что и написано в примере.
— В целом не ставилась задача точно отобразить, какая ошибка будет при выполнении кода. Важно было показать, что функция вида «function expression» не будет выполнена, если будет вызвана до своего объявления.
Рад, что статья помогла разобраться в поставленных в ней вопросах. Спасибо за комментарий!
По мелочи:
setTimeout(_ => console.log(`Made a ${flavor} cake!`, 1000)); — опечатка с закрывающимися скобками.
Исправил, спасибо за подсказку.
К выводу по второму пункту надо добавить, что возвращаться должна функция, иначе это не замыкание. В цитате ниже термин модули — но это о функциях с замыканием.
Модули требуют две ключевых характеристики: 1) внешнюю функцию-обертку, которую будут вызывать, чтобы создать закрытую область видимости 2) возвращаемое значение функции-обертки должно включать в себя ссылку на не менее чем одну внутреннюю функцию, у которой потом будет замыкание на внутреннюю область видимости обертки.
Kyle Simpson: Вы не знаете JS

https://learn.javascript.ru/closures
Здесь более подробно описано про области видимости. Мне проще запоминать то, что я понимаю, чем аналогии. Может поможет кому-то.

Sign up to leave a comment.

Articles