Попробуйте:
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
.
Для объекта obj
и "repository.url"
key
вы можете получить глубокое значение с помощью
var val = key.split(".").reduce((o,k)=>o[k],obj);
Демонстрация:
var obj = {
"name": "app",
"version": "0.1.0",
"description": "Sample description",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "some git url"
},
"keywords": [
"node"
],
"author": "Anonymous",
"license": "ISC"
};
var key = "repository.url";
var val = key.split(".").reduce((o,k)=>o[k],obj);
document.write("result: \"" + val + "\"");
Теперь представьте, что вам нужно что-то, что не вызывает исключения, когда некоторые свойства отсутствуют, например "repository.language.version"
, тогда вы можете сделать
var val = key.split(".").reduce((o={},k)=>o[k],obj);
Вы можете разбить ключ на .
перед доступом к ним на объекте
var keys = argv[2].split('.');
var result = obj;
keys.forEach(function(key){
result = result[key]
});
return result;