Javascript 如何使用函数增加对象中参数的值?

Javascript 如何使用函数增加对象中参数的值?,javascript,scope,return,Javascript,Scope,Return,我希望能够增加/更改对象内参数的值。我希望通过访问在另一个函数中递增的变量的值来更改该值 下面的示例代码显示了我正在尝试做的事情。我想要options.number随着I内部masterLoop的增加而增加 我知道I未在函数calc()的范围内定义,但我想不出一种方法来检索I的值,同时维护此通用代码结构 (函数主循环(i){ setTimeout(函数(){ ++一,; 主循环阶段=i; console.log('阶段为:'+i); 主回路(一); }, 5000) })(1); 函数计算()

我希望能够增加/更改对象内参数的值。我希望通过访问在另一个函数中递增的变量的值来更改该值

下面的示例代码显示了我正在尝试做的事情。我想要
options.number
随着
I
内部
masterLoop
的增加而增加

我知道
I
未在
函数calc()
的范围内定义,但我想不出一种方法来检索
I
的值,同时维护此通用代码结构

(函数主循环(i){
setTimeout(函数(){
++一,;
主循环阶段=i;
console.log('阶段为:'+i);
主回路(一);
}, 5000)
})(1);
函数计算(){
number=i;//我知道我没有在这个范围内定义,但我不知道如何在这个函数中访问i的递增值
返回号码;
}
变量选项={
number:calc()//我希望这个值随masterLoop()内的I增加
};
setInterval(函数(){
console.log(options.number);

}, 5000);您能否在masterloop函数作用域之外声明增量变量,以便其他函数可以在需要时访问它并读取其值


您需要确保在适当的时候重新初始化它的值。

您是否可以在masterloop函数作用域之外声明增量变量,以便其他函数可以在需要时访问它并读取其值


您需要确保在适当的时候重新初始化它的值。

第二次尝试时,您可以使
calc
成为一个立即调用的函数表达式--提供一个闭包--并在其中返回一个可以访问
foo
的函数

然后,为了保留
options.maxVolume
的最终语法,您应该将该属性定义为getter,这样实际上它在被访问时将执行一些代码,调用
calc()

var calc=(函数(){//create closure for foo
var-foo=1;
setInterval(函数(){
foo=foo+1;//删除变量!
}, 100);
返回函数calc(){//返回函数
返回foo;
}
})();
var optionsConstant={
最大音量:10
};
变量选项={
获取maxVolume(){//使其成为getter
返回选项constant.maxVolume+calc();
}
};
setInterval(函数(){
var maxVolume=options.maxVolume;
log('maxVolume:'+maxVolume);

}, 500);
第二次尝试时,可以使
calc
成为一个立即调用的函数表达式——提供一个闭包——并在其中返回一个可以访问
foo
的函数

然后,为了保留
options.maxVolume
的最终语法,您应该将该属性定义为getter,这样实际上它在被访问时将执行一些代码,调用
calc()

var calc=(函数(){//create closure for foo
var-foo=1;
setInterval(函数(){
foo=foo+1;//删除变量!
}, 100);
返回函数calc(){//返回函数
返回foo;
}
})();
var optionsConstant={
最大音量:10
};
变量选项={
获取maxVolume(){//使其成为getter
返回选项constant.maxVolume+calc();
}
};
setInterval(函数(){
var maxVolume=options.maxVolume;
log('maxVolume:'+maxVolume);

}, 500);我认为您需要使用闭包。这里有一个例子:

let returnI=(函数主循环(i){
setTimeout(函数(){
++一,;
主循环阶段=i;
console.log('阶段为:'+i);
返回主回路(i);
}, 5000)
})(1);
函数计算(){
数字=返回i;
返回号码;
}
变量选项={
编号:calc()
};
setInterval(函数(){
console.log(options.number);

}, 5000);我认为您需要使用闭包。这里有一个例子:

let returnI=(函数主循环(i){
setTimeout(函数(){
++一,;
主循环阶段=i;
console.log('阶段为:'+i);
返回主回路(i);
}, 5000)
})(1);
函数计算(){
数字=返回i;
返回号码;
}
变量选项={
编号:calc()
};
setInterval(函数(){
console.log(options.number);

}, 5000);有两个明显不同的例子说明你要做的事情,这真的很让人困惑,你能不能只举一个明确的例子说明你要做的事情?分别来说:你第一个例子的
masterLoop
中的
i
s(复数)完全是它的私有部分,主循环之外的任何东西都无法访问它们。您确实有一个似乎是全局变量(至少是此代码的全局变量),但您没有显示(
masterLoopStage
)的声明。在该示例中,
calc
可以使用。但是你的第二个例子中没有。有两个不同的例子说明你要做的事情,这两个例子明显不同,这真的很让人困惑,你能不能只举一个非常清楚的例子说明你要做的事情?分别是:
i
s(复数)在您的第一个示例中,
masterLoop
是完全私有的,在
masterLoop
之外没有任何东西可以访问它们。您确实有一个似乎是全局变量(至少是此代码的全局变量),但您没有显示(
masterLoopStage
)的声明。在该示例中,
calc
可以使用。但在第二个例子中没有,我编辑了答案,因为我不是指真正的全局,只是扩展范围并控制初始化和排序逻辑。环球并不总是坏的,对吧?我仍然在概念上思考扩展代码的实现,但我认为我不会