Представьте две коробки, одна большая и одна маленькая. Маленькая коробка находится внутри большего ящика.
Маленькая коробка представляет собой функцию setAmount
, которую вы определили. Большой ящик представляет собой закрытие, которое обертывает эту функцию setAmount.
Каждая коробка знает только то, что внутри и что находится внутри своих родительских внешних ящиков.
Ключевое слово this
, означает внутри этой коробки.
Маленькая коробка уже может видеть amount
, потому что она находится в большой коробке. Если вы определяете this.amount = something
внутри маленькой коробки, это, по сути, то же самое, что и var amount = something
.
Вы также должны быть осторожны с именами аргументов, потому что это может привести к головной боли, если вы не будете осторожны.
Проблема, с которой вы сталкиваетесь, представляет собой проблему с определением области охвата, если вам абсолютно необходимо называть переменные таким образом - вот решение.
(function() {
var amount = 0;
var scope = this;
var setAmount = function(amount) {
scope.amount = amount;
}
........
})();
Что это делает создать переменную в большем окне, которое ссылается на его объем (в нашем примере вернуться к своей собственной коробке). Поскольку маленький ящик находится внутри большого окна, он может видеть переменную области видимости.
Узнайте, как это работает: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this –