我使用 Nightwatch.js ,最近我发现了一个有趣的代码行为。
我试图用JS6中的 async / await 命令替换回调结构。
最初我开始使用此代码。它会检查浏览器窗口中是否有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时,对象 windows 仍然等于 {} 的.js
我希望我能清楚地解释清楚。
P.S。这是我在StackOverflow中的第一个问题,所以要耐心等待我。 :)
答案 0 :(得分:0)
第一个可行,因为您变异您有共享引用的对象。第二个(variable = result
)仅为局部变量赋值。调用者范围内的windows
变量没有任何关联。请记住:将变量传递给函数时,您只传递值,而不是对该变量的引用。