JSFiddle - React, Tailwind, and code Playground
HTML
<input type="button" value="test no free variables" onclick="noFree()">
<input type="button" value="counter++ twice" onclick="counterTwice()">
<input type="button" value="add 5 and 2" onclick="add5and2()">
<input type="button" value="add 5 and 4" onclick="add5and4()">
<input type="button" value="FizzBuzz 3" onclick="testFizzBuzzWith3()">
<input type="button" value="FizzBuzz Full Test (lots of alerts)" onclick="testFizzBuzzFull()">
JavaScript
function makeHello() {
var text = 'Hello';
return function() {
alert(text);
}
}
function noFree() {
var hello = makeHello();
hello();
}
function makeCounter() {
var counter = 0;
return function() {
alert(counter);
counter++;
}
}
var counter = makeCounter();
function counterTwice() {
counter();
counter();
}
function makeAdder(toAdd) {
return function(value) {
return toAdd + value;
}
}
var add5 = makeAdder(5);
function add5and2() {
alert(add5(2));
}
function add5and4() {
alert(add5(4));
}
function makeFizzBuzz() {
var map = {};
return function(value) {
if (map[value])
return 'from mapper: ' + map[value];
if (value % 15 === 0) {
map[value] = 'FizzBuzz';
return 'FizzBuzz';
}
else if (value % 3 === 0) {
map[value] = 'Fizz';
return 'Fizz';
}
else if (value % 5 === 0) {
map[value] = 'Buzz';
return 'Buzz';
}
else {
map[value] = value.toString();
return value.toString();
}
}
}
function testFizzBuzzWith3() {
var fizzBuzzer = makeFizzBuzz();
alert(fizzBuzzer(3));
}
function testFizzBuzzFull() {
var fizzBuzzer = makeFizzBuzz();
alert('3 should be Fizz = ' + fizzBuzzer(3));
alert('5 should be Buzz = ' + fizzBuzzer(5));
alert('15 should be FizzBuzz = ' + fizzBuzzer(15));
alert('1 should be 1 = ' + fizzBuzzer(1));
alert('15 should be FizzBuzz from mapper = ' + fizzBuzzer(15));
alert('9 should be Fizz = ' + fizzBuzzer(9));
alert('25 should be Buzz = ' + fizzBuzzer(25));
alert('30 should be FizzBuzz = ' + fizzBuzzer(30));
}