Skip to content

Instantly share code, notes, and snippets.

@joshblack
Last active August 29, 2015 14:12
Show Gist options
  • Save joshblack/872e5ca27f641d66632e to your computer and use it in GitHub Desktop.
Save joshblack/872e5ca27f641d66632e to your computer and use it in GitHub Desktop.
Example of how you can use closure to expose private members
function Closure() {
var number = 0;
// Manipulate the private member directly
function makeLower() {
number--;
console.log(number);
}
// Manipulate the private member directly
function makeHigher() {
number++;
console.log(number);
}
// Reassign the value of the private member
function reset() {
number = 0;
console.log(number);
}
// Prevent anything from being modified
return Object.freeze({
makeLower: makeLower,
makeHigher: makeHigher,
reset: reset
});
}
// Usage
var c = Closure();
c.makeHigher(); // 1
c.makeHigher(); // 2
c.makeHigher(); // 3
c.makeLower(); // 2
c.reset(); // 0
c.makeLower(); // -1
c.makeLower(); // -2
// Array Example
function ArrayClosure() {
var arr = [];
function addElement(e) {
arr.push(e);
console.log(arr);
}
function removeElement(e) {
var i = arr.indexOf(e);
arr = arr.slice(0, i).concat(arr.slice(i + 1, arr.length));
console.log(arr);
}
function reset() {
arr = [];
console.log(arr);
}
return Object.freeze({
addElement: addElement,
removeElement: removeElement,
reset: reset
});
}
var a = ArrayClosure();
a.addElement(0); // [0]
a.addElement(1); // [0, 1]
a.addElement(2); // [0, 1, 2]
a.addElement(3); // [0, 1, 2, 3]
a.removeElement(2); // [0, 1, 3]
a.reset(); // []
a.addElement(4); // [4]
a.addElement(5); // [4, 5]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment