jQuery,通过函数操作全局对象(意外结果?)

时间:2016-08-11 12:16:56

标签: jquery arrays

对于模糊的标题感到抱歉,但不知道该怎么说。

所以如果我有一个对象(包含一个数组(X)),我在触发函数的click事件中作为数据传递。该函数创建一个新变量(Y),引用传递的对象中的数组。如果我然后将新值推送到该数组变量(Y),则它操纵原始数组(X)而不仅仅是新创建的数组(Y)。 奇怪的解释,认为最简单的是看到我创建的this fiddle来展示整个事物。

我的问题是,为什么它会操纵对象中的原始数组? (看一下代码,如果我直接推到e.data.testdata.testarray,我会理解它是否被操作但是为什么当我推动新创建的引用变量(Y)时它会这样做。)

Testcode:

$(function() {
 function testManipulate (e) {
    alert(e.data.testdata.testarray);
    var scopedTestArray = e.data.testdata.testarray,
            newValue = 'test3';

    scopedTestArray.push(newValue);
    alert(e.data.testdata.testarray);
 }

 var testObj = {
    testarray: ['test1', 'test2']
 };

 $('.js-test').on('click', {testdata: testObj}, testManipulate);
});

1 个答案:

答案 0 :(得分:0)

我希望你需要这个

$(function() {
    var testObj = {
        testarray: ['test1', 'test2']
    };
    $('.js-test').on('click',function (e) {
        newValue = 'test'+(testObj.testarray.length+1);
        testObj.testarray.push(newValue); // you can access testObj here because scope of sub block.
        alert(testObj.testarray);
    });
});

// alert(testObj.testarray); you can not access here because it out of scope

实际上我没有正确地回答你的问题,如果我错了,请不要考虑这个答案。