Skip to content

Instantly share code, notes, and snippets.

@oleksiiBobko
Created July 5, 2016 09:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oleksiiBobko/4967083c040cdbd81e1775234986063a to your computer and use it in GitHub Desktop.
Save oleksiiBobko/4967083c040cdbd81e1775234986063a to your computer and use it in GitHub Desktop.
js closure example
#!/usr/bin/env node
function celebrityIDCreator (theCelebrities) {
var i;
var uniqueID = 100;
for (i = 0; i < theCelebrities.length; i++) {
theCelebrities[i]["id"] = function (j) {
// the j parametric variable is the i passed in on invocation of this IIFE
return function () {
return uniqueID + j;
/*each iteration of the for loop
* passes the current value of i
* into this IIFE and it saves
* the correct value to the array*/
} () /*BY adding () at the end of this function,
we are executing it immediately and returning
just the value of uniqueID + j, instead of
returning a function.*/
} (i); // immediately invoke the function passing the i variable as a parameter
}
return theCelebrities;
}
var actionCelebs = [{name:"Stallone", id:0}, {name:"Cruise", id:0}, {name:"Willis", id:0}];
var createIdForActionCelebs = celebrityIDCreator (actionCelebs);
var stalloneID = createIdForActionCelebs [0];
console.log(stalloneID.id); // 100
var cruiseID = createIdForActionCelebs [1];
console.log(cruiseID.id); // 101
var willisID = createIdForActionCelebs [2];
console.log(willisID.id); // 102
console.log(createIdForActionCelebs);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment