Skip to content

Instantly share code, notes, and snippets.

@billyct
Last active August 27, 2015 01:09
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 billyct/34a8c6457ff1c49b2ae7 to your computer and use it in GitHub Desktop.
Save billyct/34a8c6457ff1c49b2ae7 to your computer and use it in GitHub Desktop.
'use strict';
var arr = [ 1, 2, 3, 4, 5 ];
var fnArr = [];
// Wrong 1
for (var i = 0; i < arr.length; i++) {
fnArr[i] = function() {
return arr[i];
};
}
fnArr.forEach(function(fn) {
console.log(fn());
});
// undefined * 5
// Wrong 2
for (var i = 0; i < arr.length; i++) {
var curr = arr[i];
fnArr[i] = function() {
return curr;
};
}
fnArr.forEach(function(fn) {
console.log(fn());
});
// 5 * 5
// Solution 1
for (var i = 0; i < arr.length; i++) {
fnArr[i] = (function(ii) {
return function() {
return arr[ii];
};
})(i);
}
fnArr.forEach(function(fn) {
console.log(fn());
});
// 1 2 3 4 5
// Solution 2 - ECMAScript 5
arr.forEach(function(row, i) {
fnArr[i] = function() {
return row;
};
});
fnArr.forEach(function(fn) {
console.log(fn());
});
// 1 2 3 4 5
// Solution 3 - Harmony
for (var i = 0; i < arr.length; i++) {
let curr = arr[i];
fnArr[i] = function() {
return curr;
};
}
fnArr.forEach(function(fn) {
console.log(fn());
});
// 1 2 3 4 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment