分配给对象不起作用

Assigning to object doesn't work

我正在使用 Nightwatch.js,最近我发现了一个有趣的代码行为。

我试图用来自 JS6 的 async/await 命令替换回调结构。

最初

最初我是从这段代码开始的。它检查浏览器中是否有 2 个选项卡 window。

# 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 中的赋值,但对象 windows 仍然等于 {} 当我们回到 main.js.

希望我解释清楚了。

P.S。这是我在 Whosebug 中的第一个问题,所以请耐心等待。 :)

第一个有效,因为您改变一个您有共享引用的对象。第二个 (variable = result) 只是为局部变量赋值。与调用方范围内的 windows 变量没有任何联系。请记住:将变量传递给函数时,您传递的只是,而不是对该变量的引用。