var testCase = function (actual, expected, message) { if (actual !== expected) { throw message + ". Expected '" + expected + "', but was '" + actual + "'"; } }; var deepScope = function (x, y) { var _x = x, _y = y; return ()=> _x + _y + this.val; }; var a = deepScope.call({val:'A'}, 'D', 'E'); var b = deepScope.call({val:'B'}, 'D', 'F'); var c = deepScope.call({val:'C'}, 'D', 'G'); var anotherScope = function (_af) { return _af(); }; for (var i = 0; i < 1000; i++) { testCase(c(), anotherScope.call({val:'I'}, c), "Error: this is not lexically binded inside of the arrow function #1"); testCase(b(), anotherScope.call({val:'J'}, b), "Error: this is not lexically binded inside of the arrow function #2"); testCase(a(), anotherScope.call({val:'K'}, a), "Error: this is not lexically binded inside of the arrow function #3"); }