LINUX.ORG.RU

История изменений

Исправление Bad_ptr, (текущая версия) :

#> cat test.js



var last = 0

funcarray = [];

for (var i = 0; i < 10; i++) {
    funcarray[i] = function() {
        console.log("last: " + last)
    }
    last += 1
}

for (var i = 0; i < funcarray.length; i++) {
    funcarray[i]()
}



last = 0
funcarray = [];

function copy_value(last) {
    return function() {
        console.log("last: " + last)
    }
}

for (var i = 0; i < 10; i++) {
    funcarray[i] = copy_value(last)
    last += 1
}

for (var i = 0; i < funcarray.length; i++) {
    funcarray[i]()
} 

#> node test.js

last: 10
last: 10
last: 10
last: 10
last: 10
last: 10
last: 10
last: 10
last: 10
last: 10
last: 0
last: 1
last: 2
last: 3
last: 4
last: 5
last: 6
last: 7
last: 8
last: 9

Исходная версия Bad_ptr, :

Ну короче ты понял.

#> cat test.js



var last = 0

funcarray = [];

for (var i = 0; i < 10; i++) {
    funcarray[i] = function() {
        console.log("last: " + last)
    }
    last += 1
}

for (var i = 0; i < funcarray.length; i++) {
    funcarray[i]()
}



last = 0
funcarray = [];

function copy_value(last) {
    return function() {
        console.log("last: " + last)
    }
}

for (var i = 0; i < 10; i++) {
    funcarray[i] = copy_value(last)
    last += 1
}

for (var i = 0; i < funcarray.length; i++) {
    funcarray[i]()
} 

#> node test.js ...