我看到一些不太理想的代碼生成的情況是這樣的:有沒有辦法從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