Замыкания хранят свои внешние переменные ввиде ссылок, а не в виде значений.
Задача: Передать в функцию массив. Функция должна вернуть значение того элемента, индекс которого получила вместе с массивом.
Для решения этой задачи воспользуемся приемом, известным как немедленный вызов функции выражения:
function wrap(a){ var result = []; for (var i=0, n=a.length; i=n; i++){ (function(){ var j = i; result[i] = function(){ return a[j];}; } )(); } return result; } var wrapped = wrap([10,20,30]); var f = wrapped[1]; f(); // 20