http://wiki.ecmascript.org/doku.php?id=harmony:let

Given the following code:
    var a = [];
    for (let i = 0; i < 3; i++) {
        a.push(function () { return i; });
    }
    print(a[0]()); // 0 or 3?

I would expect this “desugaring”:
    var a = [];
    (function() {
        var i;
        for (i = 0; i < 3; i++) {
            (function() {
                a.push(function () { return i; });
            }());
        }
    }());
    print(a[0]()); // 3

I remember that this has been previously discussed, but can't find the thread. 
For me, the above desugaring is easier to understand than the lambda coding.

Compare: With Java, you have to declare
    final int finalI = i;
inside a for loop if you want to refer to i from an inner class. Similarly, if 
you want the result "0", you would need to write:

    var a = [];
    (function() {
        var i;
        for (i = 0; i < 3; i++) {
            (function() {
                var iCopy = i;
                a.push(function () { return iCopy; });
            }());
        }
    }());
    print(a[0]()); // 0

Axel

-- 
Dr. Axel Rauschmayer

a...@rauschma.de
twitter.com/rauschma

home: rauschma.de
blog: 2ality.com



_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to