【发布时间】:2018-06-29 11:30:10
【问题描述】:
我有一些简单的代码:
context.drawImage(image, 0, 0);
我想知道是否有可能,使用类似 ES6 的扩展(编辑:扩展语法,而不是“扩展运算符”)特性来消除幻数并使代码更明确:
const TOP_LEFT = [0, 0]
context.drawImage(image, ...[TOP_LEFT]);
有没有一种方法可以在函数调用中将变量用作多个参数?
【问题讨论】:
我有一些简单的代码:
context.drawImage(image, 0, 0);
我想知道是否有可能,使用类似 ES6 的扩展(编辑:扩展语法,而不是“扩展运算符”)特性来消除幻数并使代码更明确:
const TOP_LEFT = [0, 0]
context.drawImage(image, ...[TOP_LEFT]);
有没有一种方法可以在函数调用中将变量用作多个参数?
【问题讨论】:
是的——和你做的一样,但在你使用它时没有[]:
context.drawImage(image, ...TOP_LEFT);
现场示例:
function drawImage(image, x, y) {
console.log("image = " + image);
console.log("x = " + x);
console.log("y = " + y);
}
const TOP_LEFT = [0, 0]
drawImage("the image", ...[TOP_LEFT]);
现在,您可能不想在数千次迭代的紧密循环中执行此操作,因为理论上和指定的那样,...TOP_LEFT 涉及调用数组上的函数以创建迭代器对象,然后重复调用方法在每次创建结果对象的迭代器上,并从该结果对象获取属性。但所有这些都可能需要优化,无论如何,我们通常希望避免担心性能,直到/除非有特定的性能问题需要解决。
你可以通过freezing你的数组来帮助优化器:
const TOP_LEFT = Object.freeze([0, 0]);
...但您希望测试您的目标环境,看看这是否真的有用。
旁注:... 不是运算符,也不可能是。运算符与函数一样,只有一个结果值。展开(和休息)是主要语法,而不是运算符,例如 for 语句、函数声明和对象初始化器。
【讨论】: