JQuery/JavaScript:为什么函数会弄乱函数外部的数组?

JQuery/JavaScript:为什么函数会弄乱函数外部的数组?,javascript,jquery,Javascript,Jquery,我不明白! 函数messup()应该更改复制,而不是原始。我做错了什么 <head> <script src="../js/jquery-1.11.0.min.js"></script> <script> function messup(copy) { copy[0] ++; console.log(original); $('.putConte

我不明白! 函数
messup()
应该更改
复制
,而不是
原始
。我做错了什么

<head>
    <script src="../js/jquery-1.11.0.min.js"></script>
    <script>
        function messup(copy) {
            copy[0] ++;
            console.log(original);
            $('.putContentHere').html('<button class="plus">+</button>');
        }

        var original = [1, 1];
        var copy = original;

        $(document).ready(function() {
            messup(copy);

            $('html').on('click', '.plus', function() {
                messup(copy);
            });
        });
    </script>
</head>
<body>
    <div class="putContentHere"></div>
</body>

功能信息(副本){
复制[0]++;
控制台日志(原件);
$('.putContentHere').html('+');
}
原始变量=[1,1];
var副本=原件;
$(文档).ready(函数(){
messup(副本);
$('html')。在('click','plus',函数()上{
messup(副本);
});
});

当副本被弄乱时,如何保留原始副本?

制作阵列副本的最简单方法是:

var copy = original.slice(0);
这将生成数组的浅层副本,这对于您在这里的目的很好

一个简单的任务:

var copy = original;
导致新变量“copy”引用与“original”完全相同的数组。数组是对象,变量值指的是对象


旧版本的IE中不存在
.slice()
方法,但这些方法的相关性越来越低。

制作数组副本的最简单方法是:

var copy = original.slice(0);
这将生成数组的浅层副本,这对于您在这里的目的很好

一个简单的任务:

var copy = original;
导致新变量“copy”引用与“original”完全相同的数组。数组是对象,变量值指的是对象


.slice()
方法在IE的旧版本中不存在,但那些方法的相关性在降低。

因为
var copy=original未复制数组

What it does:
original ----------------------> Array
                                   |
                                   |
copy     --------------------------+      (The reference is copied)
=================================================================================
What you want:
original ----------------------> Array


copy     ----------------------> Array   (The Array itself is copied)
复制数组有3种类型(实际上有4种):引用副本

在代码中,您只复制引用。您要做的是浅拷贝或深拷贝

var copy = original.slice(); //shallow copy

因为
var copy=original未复制数组

What it does:
original ----------------------> Array
                                   |
                                   |
copy     --------------------------+      (The reference is copied)
=================================================================================
What you want:
original ----------------------> Array


copy     ----------------------> Array   (The Array itself is copied)
复制数组有3种类型(实际上有4种):引用副本

在代码中,您只复制引用。您要做的是浅拷贝或深拷贝

var copy = original.slice(); //shallow copy

您只需通过执行以下操作来使用对原始数组的引用

var copy = original;
因为数组只是一组整数,使用

var copy = original.slice (0); 
将复制数组及其内容。例如:

var original = [1, 1, 1];
var copy = original.slice (0);

copy[1] = 2;
console.log (original); // This will print [1, 1, 1]
console.log (copy); // This will print [1, 2, 1]

您只需通过执行以下操作来使用对原始数组的引用

var copy = original;
因为数组只是一组整数,使用

var copy = original.slice (0); 
将复制数组及其内容。例如:

var original = [1, 1, 1];
var copy = original.slice (0);

copy[1] = 2;
console.log (original); // This will print [1, 1, 1]
console.log (copy); // This will print [1, 2, 1]

你必须真的复制一份。这样一个简单的赋值只会使另一个变量引用同一个数组。我如何复制?我是新来的;我不知道有什么不同。@user3021737请看波蒂的answer@user3021737-你是编程新手吗?如果是,那么对象复制是一个非常重要的概念@德里克朕會功夫: 我是JavaScript新手。我懂一些PHP。不需要在那里使用切片技巧。谢谢你的回复。你必须真的复制一份。这样一个简单的赋值只会使另一个变量引用同一个数组。我如何复制?我是新来的;我不知道有什么不同。@user3021737请看波蒂的answer@user3021737-你是编程新手吗?如果是,那么对象复制是一个非常重要的概念@德里克朕會功夫: 我是JavaScript新手。我懂一些PHP。不需要在那里使用切片技巧。谢谢你的回复。