Присвоение объекту не работает

Я использую Nightwatch.js, и недавно я заметил интересное поведение кода.

Я пытался заменить структуры обратного вызова командами async/await из JS6.

Первоначально

Изначально я начал с этого кода. Он проверяет, есть ли у нас 2 вкладки в окне браузера.

# main.js

client.windowHandles((result) => {
    client.verify.equal(result.value.length, 2);
});

Рабочий код

И я заменил его на:

# main.js

const { assignVariable } = require("../../utils/callbacks");

let windows = {};

await client.windowHandles(assignVariable(windows));
client.verify.equal(windows.value.length, 2);

Где assignVariable это:

# callbacks.js

const assignVariable = (variable) => {
    return (result) => {
        variable.value = result.value;
    };
};

module.exports = { assignVariable };

И этот код работает.

Не работает код

Странные вещи происходят, когда я хочу изменить assignVariable на:

# callbacks.js

const assignVariable = (variable) => {
    return (result) => {
        variable = result;
    };
};

module.exports = { assignVariable };

проблема

Тогда assingVariable, похоже, никак не влияет. Я отлаживал эти строки, и назначение в assignVariable выполняется, но окна объектов по-прежнему равны {}, когда мы вернулись в main.js.

Я надеюсь, что я объяснил это ясно.

PS Это мой первый вопрос в Stackru, так что будьте терпеливы со мной.:)

1 ответ

Решение

Первый работает, потому что вы изменяете объект, на который у вас есть общая ссылка. Второй (variable = result) просто присваивает значение локальной переменной. Там нет связи с windows переменная в области действия вызывающего. Помните: при передаче переменной в функцию вы передаете только значение, а не ссылку на эту переменную.

Другие вопросы по тегам