Javascript 如何在局部范围内重新定义对象变量

Javascript 如何在局部范围内重新定义对象变量,javascript,object,variables,scope,Javascript,Object,Variables,Scope,如何在局部重新定义对象变量?对于普通变量,我会在函数中使用let,但是let似乎不适用于对象变量。有办法吗 下面的代码显示,我可以使用options.soundFileName='audio/60.wav'全局重新定义变量。但是如果我使用let options.soundFileName='audio/60.wav',它就不起作用了 var选项={ soundFileName:'audio/01.wav', }; (函数masterStart(){ setInterval(

如何在局部重新定义对象变量?对于普通变量,我会在函数中使用
let
,但是
let
似乎不适用于对象变量。有办法吗

下面的代码显示,我可以使用
options.soundFileName='audio/60.wav'全局重新定义变量。但是如果我使用
let options.soundFileName='audio/60.wav',它就不起作用了

var选项={
soundFileName:'audio/01.wav',
};          
(函数masterStart(){
setInterval(函数(){
console.log('sound name global:'+options.soundFileName)
}, 1000);
}());
A();
函数A(){
options.soundFileName='audio/60.wav';
//重新定义声音文件,但全局
//如何仅在'A()'中重新定义它?
}
/*
B();
函数B(){
让options.soundFileName='audio/60.wav';//根本不起作用
}

*/
没有局部属性,只有局部变量

如果要对对象特性进行临时更改,请将旧值保存在局部变量中:

function A() {
    let oldFileName = options.soundFileName;
    options.soundFileName = 'audio/60.wav';
    // do stuff
    // ...
    options.soundFileName = oldFileName;
}

“局部重新定义对象变量”是什么意思?与
选项的副本/克隆一样
?变量的工作方式相同,无论它们包含何种类型的值。
选项。sounfFileName
不是变量
options
是一个变量,
soundFileName
是它引用的对象的属性。我可能使用了错误的术语,但我想定义函数在options对象中全局使用的声音文件,但在某些函数中,我想更改使用的声音文件。但是,我仍然希望每个函数中的代码只引用
options.foo
,这样我就不必使每个函数的变量名唯一。我想我可以用
let
来实现这一点,但它不起作用,并抛出一个错误。
setInterval
函数在超时后以毫秒为单位获取可选参数。在那里传入您的配置。无论我放置在哪里
options.soundFileName=oldFileName
它播放旧文件名而不是新文件名(
'audio/60.wav'
)。我认为只要
options.soundFileName=oldFileName位于函数
A()的末尾
返回
选项之前,它将使用新声音运行函数
A()
。soundFileName
返回到
oldFileName
,但它只是播放
oldFileName
。也许我使用的一些延迟导致了问题?我会继续修修补补,如果我能让它工作的话,我会告诉你的。我刚刚看到你在区间函数中打印值。直到JavaScript返回,interval函数才会运行,因此属性将被设置回以前的值。它永远不会看到临时值,因为JavaScript是单线程的。您只会看到在
do stuff
部分
A()
中实际运行的代码中的临时值setTimeout
中进行编码>并延迟。例如,
setTimeout(函数(){options.soundFileName=oldFileName;},30)。这并不理想,因为我有很多函数触发,如果它们同时运行,可能(而且似乎)会使用另一个函数
soundFileName
。但它确实证明了你的代码/想法是有效的。我认为您的代码在没有延迟的情况下无法工作的原因是重置
soundFileName
会导致旧文件同时重置(或关闭足够的文件)。有没有办法更好地隔离这些临时更改?JavaScript是单线程的,两个函数不能同时运行。所以不清楚你到底想要完成什么。