JavaScript всегда передается по значению, в JavaScript нет понятия передачи по ссылке *.
Вы можете имитировать эффект, используя примитивную версию атома:
let indexAtom = {value: 0};
function changeIndex(atom) {
atom.value = 5;
}
changeIndex(indexAtom);
assert(indexAtom.value === 5);
Я скажу , что если вам это нужно, у вас обычно есть запах кода, и вам нужно переосмыслить свой подход.
В вашемВ этом случае вы должны использовать замыкание для достижения того же эффекта:
list: function (startingIndex = 0) {
let items = this.images;
let index = startingIndex; // note that index is defined here, inside of the function
return {
next: function () {
// index taken from closure.
if (index > items.length -1) {
index = 0;
}
return items[index++];
},
prev: function () {
// same index as the next() function
if (index < 0) {
index = items.length -1;
}
return items[index--];
}
}
}
* Распространенным заблуждением является то, что объекты передаются по ссылке, это сбивает с толку, потому что "значение" объектатакже упоминается как его "ссылка", программисты и названия вещей.Объекты также передаются по значению, но значение объекта - это особая «вещь», называемая «ссылкой» или «идентичностью».Это позволяет нескольким переменным содержать одну и ту же «ссылку» на один и тот же объект.