我有一个函数,当我将日期传递给函数时,它应返回两个变量thisYear
和nextYear
。但是,当我在.add
上致电date
时,即使thisYear
已经设置,它也会更改thisYear
的值。
功能和通话
http://jsfiddle.net/rLjQx/29945/
var someDate = moment()
thisYearAndNextYear(someDate)
function thisYearAndNextYear(date) {
const thisYear = date
console.log("thisYear = " + thisYear);
const nextYear = date.add(1, 'year')
console.log("nextYear = " + nextYear);
console.log("thisYear (after nextYear set) = " + thisYear);
}
输出
thisYear = 1522021438255
nextYear = 1553557438255
thisYear (after nextYear set) = 1553557438255 // ISSUE: this should still be 1522021438255
是否有人了解如何防止这种奇怪的行为导致thisYear
保留其初始值?
答案 0 :(得分:2)
通过引用传递对象。当您将引用对象的变量传递给函数时,该函数仍会获得对原始对象的引用。您可以这样想:非基元(如对象)的变量引用内存地址,并传递这些内存地址。
因此,当您在时刻对象上调用{{1}}时,对象会发生变异。
如果要克隆时刻对象,以便可以对其进行操作:
https://momentjs.com/docs/#/parsing/moment-clone/
调用{{1}}方法。
{{1}}