someList <- list();
for (i in 1:3) {
someList[[i]] <- (function (j) {
return(function () {
print(j);
});
})(i);
}
someList[[1]](); # 3
for (i in 1:3) {
someList[[i]] <- (function () {
j <- i;
return(function () {
print(j);
});
})();
}
someList[[1]](); # 1
然而 JavaScript 中,
var someList = [];
for (var i = 0; i < 3; i++) {
someList[i] = (function (j) {
return function () {
console.log(j);
};
})(i);
}
someList[0](); // 0
see also: https://bugs.r-project.org/bu...
然而,只要把该变量在函数体内引用一遍,我们可以得到预料中的结果:
我自己对这个问题的回答是,我觉得为什么出现该结果的原因可能是 R 对传入的参数采用 lazy evaluation.
官方解答在: https://bugs.r-project.org/bu...