分配给对象不起作用
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
变量没有任何联系。请记住:将变量传递给函数时,您传递的只是值,而不是对该变量的引用。
我正在使用 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
变量没有任何联系。请记住:将变量传递给函数时,您传递的只是值,而不是对该变量的引用。