Понимание захвата переменных с помощью замыканий в Javascript/Node

Есть ли определенный источник по захвату переменных в Javascript, кроме стандарта (, который трудно читать стандарт)?

В следующем коде iкопируется по значению:

for (var i = 0; i < 10; i++)
{
    (function (i)
    {
        process.nextTick(function ()
        {
            console.log(i)
        })
    }) (i)
}

Таким образом, он печатает 1..10. process.nextTick— аналог setTimeout(f,0)в node.

Но в следующем коде я не скопирован:

for (var i = 0; i < 10; i++)
{
        var j = i
        process.nextTick(function ()
        {
            console.log(j)
        })
}

Он печатает 9 10 раз. Почему? Меня больше интересует справочная/общая статья, чем объяснение этого конкретного случая захвата.

20
задан hvgotcodes 10 April 2012 в 19:49
поделиться