Я хочу иметь возможность увеличивать / изменять значение параметра внутри объекта. Я хочу, чтобы значение изменилось путем доступа к значению переменной, которая увеличивается внутри другой функции.
Пример кода ниже показывает, что я пытаюсь сделать. Я бы хотел, чтобы options.number
увеличилось по мере увеличения i
внутри masterLoop
.
Я знаю, что i
не определен в области действия function calc()
, но я не могу придумать, как извлечь значение i
, поддерживая эту общую структуру кода.
(function masterLoop(i) {
setTimeout(function() {
++i;
masterLoopStage = i;
console.log('Stage is: ' + i);
masterLoop(i);
}, 5000)
})(1);
function calc() {
number = i; // I know i isn't defined in this scope, but I can't figure out how access the incrementing value of i inside this function
return number;
}
var options = {
number: calc() // I want this vale to increase along with i inside masterLoop()
};
setInterval(function() {
console.log(options.number);
}, 5000);
Как правило, в подобных случаях я пытался бы использовать return
для извлечения значения, но я также не смог найти решение с этим, так как увеличивающееся значение находится внутри setInterval и, следовательно, его область действия не доступно для return
.
Вот пример этого:
function calc() {
var foo = 1;
setInterval(function() {
var foo = foo + 1;
}, 1000);
return foo; // the incrementing value of foo is not available outside the scope of setIterval, so this won't work. The return also won't work inside setInterval.
}
var optionsConstant = {
maxVolume: 10
};
var options = {
maxVolume: optionsConstant.maxVolume + calc() // I want calc() to be able to increment along with foo in the setInterval above.
};
setInterval(function() {
var maxVolume = options.maxVolume;
console.log('maxVolume: ' + maxVolume);
}, 5000);