分配给对象不起作用

时间:2017-11-04 09:40:50

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

我使用 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中的第一个问题,所以要耐心等待我。 :)

1 个答案:

答案 0 :(得分:0)

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