Попробуйте:
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = (function(index) {
return function() {
console.log("My value: " + index);
};
}(i));
}
for (var j = 0; j < 3; j++) {
funcs[j]();
}
Изменить (2014):
Лично я думаю, что более поздний ответ @ Aust об использовании .bind
- лучший способ сделать это сейчас. Также есть _.partial
lo-dash / underscore, когда вам не нужно или хотите взаимодействовать с bind
thisArg
.
Поскольку вы не включили оптимизацию.
Без оптимизации компилятор не пытается свести к минимуму объем пространства или время, в котором он нуждается, для чего-либо в сгенерированном коде - он просто генерирует код в
Добавьте -O2
(или даже просто -O1
) или -Os
, если вы хотите, чтобы компилятор создавал достойный код.
Компиляторы действительно могут зарезервировать дополнительную память для себя.
У Gcc есть флаг -mpreferred-stack-boundary
, чтобы установить выравнивание, которое оно будет поддерживать. Согласно документации значение по умолчанию равно 4, что должно приводить к 16-байтовому выравниванию, которое необходимо для инструкций SSE.
Как VermillionAzure отмечен в комментарии , вы должны предоставить свои параметры версии gcc и времени компиляции (используйте gcc -v
, чтобы показать их).
Мне нужно всего 24 байта.
blockquote>Компилятору требуется пространство для обратного адреса и базового указателя. Поскольку вы находитесь в режиме 64 бит, это еще 16 байт. Всего 40. Разорвите это до 32-байтной границы, и вы получите 64.