Я тут уже как-то писал о «глубоком понимании» сабжем жаваскрипта, которое он так любит себе приписывать. Еще одна вариация на эту тему. Он пишет в «good parts»:
Если функция не является свойством объекта, она вызывается как фунция (уже тут мы могли бы удивиться: а что, когда она является свойством объекта, она не вызывается как функция??? — ну ладно, возможно перевод неточен)...
Когда функция вызывается таким (каким, идиот?) способом, this связывается с глобальным объектом. Это ошибка в конструкции (имеется в виду — в дизайне, видимо, — косяк перевода) языка (O_o).
[Дальше вообще бомба]
Если бы Javascript был разработан правильно, то при вызове внутренней функции параметр this был бы по прежнему привязан к переменной this внешней функции. Следствием этой ошибки...
Дальше наш «эксперт дизайна языков», городит (очевидный, тащемта) велосипед, героически решая проблему проброса динамического контекста в замыкание через переменную.
Возьмем такой код:
f=function(){console.log(this.a); return function(){console.log(this.a)}}
ob={
a:1,
f:f
}
a=10
ob.f()()// 1 10