2017-09-27 24 views
2

很多時候,閱讀Babel及其插件的文檔,我遇到了loose選項。我還沒有看到一個足夠好的例子來理解它是什麼。在Babeljs中「鬆散」的意思是什麼?

下面是preset-es2015文檔中的示例。

鬆散

boolean,默認爲false

爲此預設中的任何插件啓用「鬆散」轉換, 允許它們轉換。

有人可以詳細解釋這個選項嗎?

回答

1

This article是目前網絡上最好的例子。我建議你閱讀這篇文章,它解釋了插件babel-plugin-transform-es2015-class的例子。

下面我將給出另一個插件babel-plugin-transform-es2015-for-of的例子。

源代碼:

for (var i of foo) {} 

loose: false - 生成的代碼獲得了最嚴格的,並與標準兼容,具有許多檢查。

var _iteratorNormalCompletion = true; 
var _didIteratorError = false; 
var _iteratorError = undefined; 

try { 
    for (var _iterator = foo[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { 
    var i = _step.value; 
    } 
} catch (err) { 
    _didIteratorError = true; 
    _iteratorError = err; 
} finally { 
    try { 
    if (!_iteratorNormalCompletion && _iterator.return) { 
     _iterator.return(); 
    } 
    } finally { 
    if (_didIteratorError) { 
     throw _iteratorError; 
    } 
    } 
} 

loose: true - 較輕的版本,它遵循規格較少,但產生相同的結果。

for (var _iterator = foo, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { 
    var _ref; 

    if (_isArray) { 
    if (_i >= _iterator.length) break; 
    _ref = _iterator[_i++]; 
    } else { 
    _i = _iterator.next(); 
    if (_i.done) break; 
    _ref = _i.value; 
    } 

    var i = _ref; 
}