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”
-----------