Я новичок в Javascript и был озадачен тем, как работает объявление функции. Я провёл тест и получил интересные результаты:
say();
function say()
{
alert("say");
}
Форвард-декларация сработала и всплывающее окно "сказать"
На противоположном
say();
say = function()
{
alert("say");
}
не работал, хотя он также объявил объект функции
Если мы объявим функцию и объявим ее потом:
function say()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
Я получил «сказать» вместо «говорить». Это сюрприз!
OK. Кажется, что работает только последнее объявление функции. Затем давайте сначала объявим объект функции, а затем "обычную" функцию:
say = function()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
say();
Еще один сюрприз, это было «говорить», а затем «говорить». «Обычное» объявление функции вообще не работает!
Есть ли объяснение всем им? И если «обычное» объявление функции действительно настолько «хрупкое» и может быть легко переопределено объектом функции с тем же именем, следует ли мне держаться подальше от этого?
Другой вопрос: только с форматом объекта функции становится ли это предварительное объявление невозможным? Есть ли способ «смоделировать» это в Javascript?