我看到一些不太理想的代码生成的情况是这样的:有没有办法从Babel获得较小的代码生成?
const selectedReddit = (state = 'reactjs', action) => {
console.log(state, action);
}
它被改造成这样:
'use strict';
var selectedReddit = function selectedReddit() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'reactjs';
var action = arguments[1];
console.log(state, action);
};
这是一个相当大的代码膨胀,当它可能已被:
'use strict';
function selectedReddit(state, action) {
state = state || 'reactjs';
console.log(state, action);
};
也许这与转换let有关,但这对于默认参数来说似乎是一个相当昂贵的转储。是否有一些可以应用于此输出的代码缩小,或者是否会产生较小代码的不同变换器?
需要119个字符时需要219个字符。这大约有45%的代码膨胀。
@lonesomeday指出这不会为state === false
但
'use strict';
function selectedReddit(state, action) {
state = (state === undefined) ? 'reactjs' : state;
console.log(state, action);
};
哪@ 160个字节,这仅仅是一个26%的代码膨胀重达工作。
我不知道为什么var funcName = function funcName
有人插入,为什么所有的参数变成参数[索引]。
在ES6中编写代码会很棒,但是这几乎是尖叫而已!如果你的代码将以这种方式被浏览器浏览。
它不可能是'state = state || 'reactjs';'因为原文会允许'false',而这会取代它。这对你来说可能更好 - 但这不是ES6代码的含义。 – lonesomeday
所以,即使我纠正这一点,它仍然可能产生的代码26%的惩罚。 – boatcoder
我的猜测是,当涉及到包含其他参数时,它是最简单的编码方式,但我同意它效率不高。至于'var funcName = function funcName',我想这是试图解决'Function.prototype.name'的问题。 – lonesomeday