Babeljs中“松散”的意思是什么?

时间:2017-09-27 10:21:49

标签: javascript webpack babeljs

很多时候,阅读Babel及其插件的文档,我遇到了loose选项。我还没有看到足够好的例子来理解它是什么。

以下是preset-es2015文档中的示例。

  

松散

     

boolean,默认为false

     

为此预设中的任何插件启用“松散”转换   允许他们。

有人可以详细解释这个选项吗?

1 个答案:

答案 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;
}