首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止替换ES6对象扩展表示法

防止替换ES6对象扩展表示法
EN

Stack Overflow用户
提问于 2020-03-12 09:37:16
回答 1查看 132关注 0票数 0
代码语言:javascript
复制
!((
    input,
    processed = {
        foo: 1,
        ...input
    }
) => {
    window.console.log(processed)
})({
    bar: 2  // input configuration
})

被缩小为:

代码语言:javascript
复制
((t, e = {
    foo: 1,
    bar: 2
}) => {
    window.console.log(e);
})();

为了以后的配置,我需要那个input参数

问题:如何维护原始模式?

我需要的输出:

代码语言:javascript
复制
((t, e = {
    foo: 1,
    ...t
}) => {
    window.console.log(e);
})({bar: 2});

评论后的最新情况:

代码语言:javascript
复制
let input1 = { bar:2 }
!((
    input,
    processed = {
        foo: 1,
        ...input
    }
) => {
    window.console.log(processed)
})( input1 )

产出:

代码语言:javascript
复制
((t, e = {
    foo: 1,
    ...t
}) => {
    window.console.log(e);
})({
    bar: 2
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-12 11:29:11

Terser将负责当前版本的代码。现在,您将一个常量参数传递给一个函数,因此terser只需内联它就可以阻止中间对象的创建。

如果将来您在函数内部(对于原语值)或在函数外部(对于对象)更改此参数,则terser应该识别该参数,而不再是内联的。

令人惊讶的是,已经将参数声明为变量似乎给了terser适当的提示,OP发现了这一点:

代码语言:javascript
复制
let input1 = { bar:2 }
!((
    input,
    processed = {
        foo: 1,
        ...input
    }
) => {
    window.console.log(processed)
})( input1 )

会导致

代码语言:javascript
复制
((t, e = {
    foo: 1,
    ...t
}) => {
    window.console.log(e);
})({
    bar: 2
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60651211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档