const vs let vs var in closures (v8)

Revision 8 of this benchmark created on


Preparation HTML

<script>
  "use strict";

  const globalConst1 = 1;
  const globalConstA = "a";
  const globalConstO = {o:"o"};
  let globalLet1 = 1;
  let globalLetA = "a";
  let globalLetO = {o:"o"};
  var globalVar1 = 1;
  var globalVarA = "a";
  var globalVarO = {o:"o"};

  function makeConstClosure(n) {
    const value = n;

    return function() {
      return value;
    }
  }

  var cc1 = makeConstClosure(1);
  var cca = makeConstClosure("a");
  var cco = makeConstClosure({o:"o"});

  function makeLetClosure(n) {
    let value = n;

    return function() {
      return value;
    }
  }

  var lc1 = makeLetClosure(1);
  var lca = makeLetClosure("a");
  var lco = makeLetClosure({o:"o"});

  function makeVarClosure(n) {
    var value = n;

    return function() {
      return value;
    }
  }

  var vc1 = makeVarClosure(1);
  var vca = makeVarClosure("a");
  var vco = makeVarClosure({o:"o"});

  var gcc1 = function() {
      return globalConst1;
      };
  var gcca = function() {
      return globalConstA;
      };
  var gcco = function() {
      return globalConstO;
      };
      
  var glc1 = function() {
      return globalLet1;
      };
  var glca = function() {
      return globalLetA;
      };
  var glco = function() {
      return globalLetO;
      };
      
  var gvc1 = function() {
      return globalVar1;
      };
  var gvca = function() {
      return globalVarA;
      };
  var gvco = function() {
      return globalVarO;
      };

  var count = 5000;
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
const
for (var i = 0; i < count; i++) {
  if (cc1() !== 1) throw new Error();
  if (cca() !== "a") throw new Error();
  if (cco().o !== "o") throw new Error();
}
ready
let
for (var i = 0; i < count; i++) {
  if (lc1() !== 1) throw new Error();
  if (lca() !== "a") throw new Error();
  if (lco().o !== "o") throw new Error();
}
ready
global const
for (var i = 0; i < count; i++) {
  if (gcc1() !== 1) throw new Error();
  if (gcca() !== "a") throw new Error();
  if (gcco().o !== "o") throw new Error();
}
ready
global let
for (var i = 0; i < count; i++) {
  if (glc1() !== 1) throw new Error();
  if (glca() !== "a") throw new Error();
  if (glco().o !== "o") throw new Error();
}
ready
var
for (var i = 0; i < count; i++) {
  if (vc1() !== 1) throw new Error();
  if (vca() !== "a") throw new Error();
  if (vco().o !== "o") throw new Error();
}
ready
global var
for (var i = 0; i < count; i++) {
  if (gvc1() !== 1) throw new Error();
  if (gvca() !== "a") throw new Error();
  if (gvco().o !== "o") throw new Error();
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.