对于模糊的标题感到抱歉,但不知道该怎么说。
所以如果我有一个对象(包含一个数组(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);
});
答案 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
实际上我没有正确地回答你的问题,如果我错了,请不要考虑这个答案。