Что будет при повторном вызове функции?
var f = function *!*sayHi*/!*(n) {
alert(n);
*!*sayHi = 0;*/!* // перезаписываем имя функции
}
f(1); // что выведет?
f(2); // а теперь что выведет?
Разумеется, в жизни мы не делаем такого, но разобрать ситуацию важно для общего понимания функций.
Решение
Решение
Ничего особенного не произойдет, функция будет работать как обычно:
var f = function *!*sayHi*/!*(n) {
alert(n);
*!*sayHi = 0;*/!*
}
f(1); // 1
f(2); // 2
Дело в том, что переменная f хранит ссылку на функцию.
Изнутри функции создается переменная sayHi, которая тоже ссылается на функцию. Если мы перезапишем её, то просто будет на одну ссылку на функцию меньше. Ну и что…
#410