У меня возникают проблемы с определением того, какая концепция объясняет причину, по которой значение свойства "count" объекта сохраняется в приведенном ниже коде.
Я прочитал и просмотрел раздел this и прототип объекта из Getify's You Not Know JS
а также их раздел, объясняющий лексическое это .
Тем не менее, я не могу понять мой код ниже. Это лексический обзор?
Или эта привязка позволяет сохранить значение count?
Ниже приведен пример кода:
var obj = {
count: 0,
method: function() {
console.log("in method: " + this.count)
return this.count++;
},
timeOutMethod: function() { // I understand here we explicitly bind this, no problem here
setTimeout(function() {
console.log(this.count++)
}.bind(this), 100)
}
}
// here is where I have issue, when the method is invoked as a function
for (var i = 0; i<10; i++) {
console.log(obj.method()) // invoked as a function
}
// I've left this small block in for convenience
// I have no trouble with understanding why this block outputs what it outputs
for (var i = 0; i<10; i++) {
console.log(obj.method) // "gets its value (a reference to a function) and then logs that" from TJ Crowder
}
Я ожидаю, что вывод первого вызова метода для obj.method () выведет
// 0
// in method 0
// 1
// in method 1
// 2
.
.
.
// 10
// in method 10
У меня нет проблем с тем, что выводится. Мой вопрос снова: Это лексическая область видимости?
Или эта привязка позволяет сохранить значение count?
Спасибо, что нашли время помочь.
Редактировать 1
С помощью поста Tj Crowder, приведенного ниже, я отредактировал фрагмент кода, чтобы убрать ошибки, потому что это отвлекало меня от моего вопроса.