Как передать переменную по ссылке? - PullRequest
0 голосов
/ 22 сентября 2018

в других языках программирования мы используем ключевое слово & для передачи переменной по ссылке.

, например, в php;

$a = 10;

function something(&$a){
    $a = 7;
};

something($a);

echo $a;
// 7

Как мы можем сделать это в javascript?

Когда пользователь нажимает стрелку вправо или влево, я пытаюсь перейти к следующему или предыдущему.изображение по индексу массива;

list: function (index) {
    let items = this.images;
    return {
        next: function () {
            if (index > items.length -1) {
                index = 0;
            }
            return items[index++];
        },
        prev: function () {
            if (index < 0) {
                index = items.length -1;
            }
            return items[index--];
        }
    }
}

За пределами этого итератора мне нужно использовать переменную индекса.Но я получаю только старое значение ... Я хочу получить текущий индекс.

1 Ответ

0 голосов
/ 22 сентября 2018

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--];
        }
    }
}

* Распространенным заблуждением является то, что объекты передаются по ссылке, это сбивает с толку, потому что "значение" объектатакже упоминается как его "ссылка", программисты и названия вещей.Объекты также передаются по значению, но значение объекта - это особая «вещь», называемая «ссылкой» или «идентичностью».Это позволяет нескольким переменным содержать одну и ту же «ссылку» на один и тот же объект.

...