Присвоение объекту не работает
Я использую 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
переменная в области действия вызывающего. Помните: при передаче переменной в функцию вы передаете только значение, а не ссылку на эту переменную.