xxleyi / learning_list

聚集自己的学习笔记
10 stars 3 forks source link

JS es6 => es5: function parameter scope and block scope #208

Open xxleyi opened 4 years ago

xxleyi commented 4 years ago
// es6
let p1 = p2 = 1
let callable = () => p2 = p2 + 1
function functionParamScope(p1 = () => p1, p2 = () => p2, p3 = 3 + callabe()){
  var p1 = p2()
  var p2 = p1()
  var p3
}

function blockScope() {
  const r = []
  for (let i = 0; i < 3; i++){
    r.push(() => i)
  }
  for (var i = 0; i < 3; i++){
    r.push(() => i)
  }
}

compiled to es5

// es5
var p1 = p2 = 1;

var callable = function callable() {
  return p2 = p2 + 1;
};

function functionParamScope() {
  var p1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {
    return p1;
  };
  var p2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
    return p2;
  };
  var p3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3 + callabe();
  return function (p1, p2) {
    var p1 = p2();
    var p2 = p1();
  }(p1, p2);
}

function blockScope() {
  var r = [];

  var _loop = function _loop(_i) {
    r.push(function () {
      return _i;
    });
  };

  for (var _i = 0; _i < 3; _i++) {
    _loop(_i);
  }

  for (var i = 0; i < 3; i++) {
    r.push(function () {
      return i;
    });
  }
}

值得留意的是: