Dlaczego ta ogromna różnica wydajności dla zamkniętej funkcji Javascript?

Więc mam ten prosty kod:

function Run () {
  var n = 2*1e7;
  var inside = 0;
  while (n--) {
    if (Math.pow(Math.random(), 2) +
        Math.pow(Math.random(), 2) < 1)
      inside++;
  }

  return inside;
}

var start = Date.now();
Run();
console.log(Date.now() - start);

I wyemituje trochę czasu około 335 ms. To całkiem nieźle. Ale jeśli hermetyzuję funkcję Run w następujący sposób:

var d = Date.now();
(function Run () {
  var n = 2*1e7;
  var inside = 0;
  while (n--) {
    if (Math.pow(Math.random(), 2) +
        Math.pow(Math.random(), 2) < 1)
      inside++;
  }

  return inside;
})();
console.log(Date.now() - d);

Wyda 18319 ms, co jest znacznie gorsze niż w poprzednim przypadku. Dlaczego to ?

Ponadto, jeśli ma to znaczenie, używam go w Chrome 26.0.1410.63 w konsoli. Na node.js oba fragmenty działają dobrze na konsoli.

questionAnswers(1)

yourAnswerToTheQuestion