0

我正在使用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.js时,对象窗口仍然等于{}

我希望我已经解释清楚了。

PS 这是我在 StackOverflow 中的第一个问题,所以请耐心等待。:)

4

1 回答 1

0

第一个有效,因为你正在改变一个你有共享引用的对象。第二个 ( variable = result) 仅将值分配给局部变量。windows调用者范围内的变量没有连接。请记住:将变量传递给函数时,您只传递了 value,而不是对该变量的引用。

于 2017-11-04T09:44:23.550 回答