我有以下变量:
var a = [30,6,26,49,3,9,28];
以及以下两个函数:
function init(data) {
var modifiedData = data.reverse().slice(1, data.length).reverse();
return modifiedData;
}
// Output should be:
// Init: 30,6,26,49,3,9,28
// [30, 6, 26, 49, 3, 9]
function last(data) {
var modifiedData = data.reverse().slice(0, 1);
return modifiedData;
}
// Output should be:
// Last: 30,6,26,49,3,9,28
// [28]
如果我像这样调用每个函数:
init(a);
last(a);
我从第二个函数得到以下输出:
Last: 28,9,3,49,26,6,30
[30]
因为显然第一个函数正在对数据应用reverse(),而第二个函数似乎继承了第一个函数的reverse()。
如何连续使用这两个函数,同时使用相同的变量作为引用?
最佳答案
Array.prototype.reverse
反转实际数组(在使用 .slice()
克隆之前)。忘记相反的事情,您可以直接使用 array.slice 来做到这一点:
var a = [30,6,26,49,3,9,28];
function init(data) {
console.log("Init: " + data);
var modifiedData = data.slice(0, -1);
console.log(modifiedData);
return modifiedData;
}
// Output should be:
// Init: 30,6,26,49,3,9,28
// [30, 6, 26, 49, 3, 9]
function last(data) {
console.log("Last: " + data);
var modifiedData = data.slice(-1);
console.log(modifiedData);
return modifiedData;
}
// Output should be:
// Last: 30,6,26,49,3,9,28
// [28]
init(a);
last(a);
运行它时,请查看浏览器控制台以查看结果。
-1
与 data.length - 1
相同。
关于javascript - 如何缩小范围以防止变量被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31033641/