考虑一下我有一个名为的全局变量generatedPattern
。我想在中使用它function animate()
,但不想更改其值。因此,我将generatePattern复制到var patternToAnimate
函数中的本地var(say )中,然后使用patternToAnimate。
对patternToAnimate的任何更改会更改generatePattern吗?如果是这样,如何避免这种情况?
即,如何在不全局更改的情况下在本地函数中使用generatePattern?
function animateGeneratedPattern() {
var patternToAnimate = generatedPattern;
function animateNextPattern(lightup) {
if (!patternToAnimate|| patternToAnimate.length === 0) {
return;
}
switch(patternToAnimate[0]) {
case 1:
animateRed();
break;
case 2:
animateGreen();
break;
case 3:
animateBlue();
break;
case 4:
animateYellow();
break;
}
if (lightup) {
// Long delay before turning light off
setTimeout(function() {
animateNextPattern(false);
}, 500);
}
else {
patternToAnimate.splice(0, 1);
// Small delay before turning on next light
setTimeout(function() {
animateNextPattern(true);
}, 10);
}
}
animateNextPattern(true);
}
当patternToAnimate被拼接时,generatePattern也将被拼接。
如果您在generatedPattern
其他地方使用和更改,那么它会被更改。
如果要使用genratedPattern
另一个函数中的值而不修改它,则确实必须复制它。但是要当心,不要将其保存为参考:
var generatedPattern = [1, 2, 3];
var patternToAnimate = generatedPattern;
这里patternToAnimate
是对的引用generatedPattern
。因此,修改patternToAnimate
generatedPattern
时也会被修改。因为它们实际上是相同的数组。
如果要将一个数组复制到另一个数组,请使用 slice
var generatedPattern = [1, 2, 3];
var patternToAnimate = generatedPattern.slice();
现在patternToAnimate
是一个新的副本generatedPattern
,可以在不修改原始数组的情况下对其副本进行修改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句