javascript - 在函数中使用全局变量的副本

标签 javascript function global-variables local-variables

假设我有一个名为 generatedPattern 的全局变量。我想在 function animate() 中使用它,但不想更改它的值。因此,我将 generatedPattern 复制到函数中的本地 var(例如 var patternToAnimate),然后使用 patternToAnimate。

对patternToAnimate 的任何更改都会改变 generatedPattern 吗?如果是这样,我该如何避免这种情况?

即,如何在本地函数中使用 generatedPattern 而不全局更改它?

代码

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被拼接时, generatedPattern也被拼接。

最佳答案

如果您在其他地方使用并更改generatePattern,那么它就会发生变化。

如果你想在另一个函数中使用generatedPattern的值而不修改它,你确实必须复制它。但请注意,不要将其保存为引用:

var generatedPattern = [1, 2, 3];
var patternToAnimate = generatedPattern;

这里,patternToAnimate 是对 generatedPattern 的引用。因此,当您修改 patternToAnimate 时,generatePattern 也会被修改。因为它们实际上是相同的数组。

如果要将一个数组复制到另一个数组,请使用slice

var generatedPattern = [1, 2, 3];
var patternToAnimate = generatedPattern.slice();

现在 patternToAnimate generatedPattern 的新副本,可以在不修改原始数组的情况下对其进行修改。

演示:https://jsfiddle.net/kx7f766w/1/

关于javascript - 在函数中使用全局变量的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37585254/

相关文章:

javascript - 设置 onMouseDown 的最短执行时间

javascript - 从嵌套匿名函数中获取值(value)

R重命名函数中传递的列

c - C 中全局结构变量的最佳使用

javascript - 全局变量仅返回循环中最后一个实例的值

php - 如何创建一个全局可访问的对象

javascript - 根据屏幕宽度更改 JavaScript 中的 a 标签属性

javascript - 文本不仅使背景层具有动画效果

python - 如何将新值分配给另一个列表中的列表?

javascript - 在此上下文中元素 div 不允许作为元素 h5 的子元素