Yang benar-benar saya benci di javascript (jika Anda mencoba melihatnya sebagai bahasa FP) adalah ini:
function getTenFunctionsBad() {
var result = [];
for (var i = 0; i < 10; ++i) {
result.push(function () {
return i;
});
}
return result;
}
function getTenFunctions() {
var result = [];
for (var i = 0; i < 10; ++i) {
result.push((function (i) {
return function () {
return i;
}
})(i));
}
return result;
}
var functionsBad = getTenFunctionsBad();
var functions = getTenFunctions()
for (var i = 0; i < 10; ++i) {
print(functionsBad[i]() + ', ' + functions[i]());
}
Anda perlu memahami lingkungan tumpukan JS (saya tidak, jika istilah yang tepat) untuk memahami perilaku seperti itu.
Dalam skema misalnya Anda tidak bisa menghasilkan hal seperti itu (Ok, ok - dengan bantuan referensi bahasa yang mendasarinya Anda bisa membuatnya):
(define (make-ten-functions)
(define (iter i)
(cond ((> i 9) '())
(else (cons (lambda () i) (iter (+ i 1))))))
(iter 0))
(for-each (lambda (f)
(display (f))
(newline)) (make-ten-functions))