JSFiddle - React, Tailwind, and code Playground
JavaScript
(function test0 () {
// x is closed over, it doesn't change in the outer scope
var incr = function(x) { return x + 1;};
var makeclosure = function () {
var x = 0;
return function () {
x = incr(x);
console.log(x);
};
};
var x = "x";
console.log(x);
var c = makeclosure();
c();
c();
incr = function(x) { return x - 1;};
c();
c();
console.log(x);
}());
console.log(' ');
(function test1 () {
// putting incr inside the closure, now it won't get overwritten
var c = (function() {
var incr = function (x) { return x + 1;}
var x = 0;
return function () {
x = incr(x);
console.log(x);
};
})();
c();
c();
var incr = function(x) { return x - 1;};
c();
c();
}());
console.log(' ');
(function test2 () {
// going one more scope outward, with incr now being closed over
var outer = (function anotherScope() {
var incr = function(x) { return x + 1;};
var makeclosure = function () {
var x = 0;
return function () {
x = incr(x);
console.log(x);
};
};
var c = makeclosure();
c();
c();
incr = function(x) { return x - 1;};
c();
c();
return c;
}());
outer();
outer();
var incr = function(x) { return "not called" }
outer();
outer();
}());
console.log(' ');
(function test3 () {
// omitting the var keyword, so function declarations are hoisted
function incr(x) { return x + 1;};
var makeclosure = function () {
var x = 0;
return function () {
x = incr(x);
console.log(x);
};
};
var c = makeclosure();
c();
c();
function incr(x) { return...