№1
Корректный рекурсивный вызов функции, с защитой от изменения её имени
function factorial(x) {
return x == 1 ? 1 : x + arguments.callee(x - 1);
}
var fac = factorial;
factorial = 27;
alert(fac(factorial)); // Возвращает “378″.
// ---------------------------------------------------
var factorial = function f(x) {
return x == 1 ? 1 : x + f(x - 1);
};
alert(f); // Ошибка: “f is not defined”
Источник:
vingrad.ru
vingrad.ru