Еще один способ, который еще не упоминался, - использование Function.prototype.bind
var funcs = {};
for (var i = 0; i < 3; i++) {
funcs[i] = function(x) {
console.log('My value: ' + x);
}.bind(this, i);
}
for (var j = 0; j < 3; j++) {
funcs[j]();
}
UPDATE
Как указано @squint и @mekdev, вы получаете лучшую производительность, сначала создавая функцию за пределами цикла, а затем привязывая результаты в цикле.
function log(x) {
console.log('My value: ' + x);
}
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = log.bind(this, i);
}
for (var j = 0; j < 3; j++) {
funcs[j]();
}
Я не знаю, нашли ли вы ответ на этот Алекс, но упомянутый вопрос / ответ в комментариях LDL дает ответ, представленный Шрикантом Инджарапу.
Вот ответ, на тот случай, если кто-то не захочет перейти к этой ссылке:
Если вы настроите таргетинг на ES5, добавьте «node_modules / typescript / lib / lib .es6.d.ts "в файл tsconfig.json:
blockquote>{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "outDir": "built", "rootDir": ".", "sourceMap": false }, "files": [ "helloworld.ts", "node_modules/typescript/lib/lib.es6.d.ts" ], "exclude": [ "node_modules" ] }
EDIT
В моем приложении я использую webpack для создания своего приложения, и я все еще получить те же ошибки, которые выплевываются на консоли. Я в настоящее время ищу, чтобы исправить это и отчитаюсь с тем, что я нахожу.