【问题标题】:Assigning to object doesn't work分配给对象不起作用
【发布时间】:2018-04-16 23:43:45
【问题描述】:

我正在使用 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.

希望我已经解释清楚了。

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

【问题讨论】:

    标签: javascript asynchronous async-await nightwatch.js object-property


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2021-01-05
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多