很多时候,阅读Babel及其插件的文档,我遇到了loose
选项。我还没有看到足够好的例子来理解它是什么。
以下是preset-es2015文档中的示例。
松散
boolean
,默认为false
。为此预设中的任何插件启用“松散”转换 允许他们。
有人可以详细解释这个选项吗?
答案 0 :(得分: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;
}