Как эта функция закрытия JavaScript -повторно использует объект без глобальной переменной?

Я решил сделать еще один шаг вперед, пытаясь понять Javascript и снова прочитать Javascript :Хорошие части . И вот первое сомнение:

Допустим, я хочу избежать использования глобальных переменных, потому что они вредны, и поэтому у меня есть следующее:

var digit_name = function(n) {
 var names = ['zero','one','two','three'];
 return names[n];
}

Д.Крокфорд утверждает, что это медленно , потому что каждый раз, когда функция вызывается, выполняется новая реализация names. Итак, затем он переходит к решению замыкания , делая это:

var digit_name = function () {
  var names = ['zero', 'one', 'two', 'three'];
  return function (n) {
    return names[n];
  }
}();

Это делает переменную namesхранимой в памяти, и поэтому она не создается каждый раз, когда мы вызываем digit_name.

Я хочу знать, почему? Когда мы вызываем digit_name, почему первая строка «игнорируется»?Что мне не хватает? Что здесь происходит на самом деле?

Я взял этот пример не только из книги, но и из этого видео (. минута 26)

(если кто-то думает о лучшем названии, предложите, если это уместно...)

11
задан Nobita 9 August 2012 в 06:41
поделиться