【问题标题】:Possible to used a named variable as multiple arguments?可以将命名变量用作多个参数吗?
【发布时间】:2018-06-29 11:30:10
【问题描述】:

我有一些简单的代码:

 context.drawImage(image, 0, 0);

我想知道是否有可能,使用类似 ES6 的扩展(编辑:扩展语法,而不是“扩展运算符”)特性来消除幻数并使代码更明确:

 const TOP_LEFT = [0, 0]
 context.drawImage(image, ...[TOP_LEFT]);

有没有一种方法可以在函数调用中将变量用作多个参数?

【问题讨论】:

    标签: javascript magic-numbers


    【解决方案1】:

    是的——和你做的一样,但在你使用它时没有[]

    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 语句、函数声明和对象初始化器。

    【讨论】:

    • 这很好用——我会在计时器用完时接受它。我不知道谁是downvoter,这对他们在不提供任何反馈的情况下downvoter 非常粗鲁。
    • @mikemaccana - 很高兴有帮助。一般来说,在不发表评论的情况下投反对票是完全可以的,并且 Stack Exchange 不鼓励解释 投反对票。但是留下评论说你认为是错误的,而不是主动说“我投了反对票,因为......”可能很有用。每当有人否决我的回答时,我做的第一件事就是说“哦,天哪,我哪里搞砸了?”并仔细检查。所以即使没有评论,也经常有用。但是当我知道答案是正确的时,我有时会要求澄清......
    • @Nick 我在询问之前搜索了重复项,但找不到任何东西。他们在哪?您也没有将其标记为重复。
    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2013-09-15
    • 2021-06-20
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多