Edit in JSFiddle

function factorial(num) {
  if (num <= 1) {
    return 1;
  } else {
    // callee 속성은 피호출자인 함수를 가리키므로 함수이름이 변경되어도 동작.
    return num * arguments.callee(num - 1);
  }
}

// trueFactorial 변수가 factorial 함수를 가리키게 함
var trueFactorial = factorial;
// factorial 함수는 0을 반환하는 함수를 가리키게 함
factorial = function() {
  return 0;
}

document.write("trueFactorial call :" + trueFactorial(5) + "<br>"); // 120
document.write("factorial call :" + factorial(5) + "<br>"); // 0