JS 002: Block Binding in Loops

by Nico D

JavaScript

var version = 1;
var exampleNumber = 1;
const log = function(message) {
  if (version < exampleNumber) {
    version = exampleNumber;
    document.write("<br/>");
  }
  const title = 'EXAMPLE ' + exampleNumber + ': ';
  document.write(title + message + "<br/>");
};
//////////////////////
exampleNumber = 1;
for (var i = 0; i < 4; i++) {
  log(i);
}
log(i);
//////////////////////
exampleNumber = 2;
try {
  for (let i2 = 0; i2 < 4; i2++) {
    log(i2);
  }
  log(i2);
} catch (e) {
  log("ERROR => " + e.message);
}
//////////////////////
exampleNumber = 3;
var funcs = [];
for (var i3 = 0; i3 < 4; i3++) {
  funcs.push(function() {
    log(i3);
  });
}
funcs.forEach(function(func) {
  func();
});
//////////////////////
exampleNumber = 4;
var funcs = [];
for (var i4 = 0; i4 < 4; i4++) {
  funcs.push((function(value) {
    return function() {
      log(value);
    }
  }(i4)));
}
funcs.forEach(function(func) {
  func();
});
//////////////////////
exampleNumber = 5;
var funcs = [];
for (let i5 = 0; i5 < 4; i5++) {
    funcs.push(function() {
        log(i5);
    });
}
funcs.forEach(function(func) {
    func();
})