Причина для ОШИБКА1:
Вы пытаетесь получить доступ к свойству объекта, который не был полностью создан.Создание FooNS завершается только после того, как браузер (интерпретатор) выполняет строку 8 в вашем скрипте (т. Е. };
).
Для инициализации свойств может быть лучше использовать функцию-член init или что-то в этом роде,и вызвать это определение FooNS, например:
var FooNS = {
T: 5,
S: 0,
init: function() {
this.S = this.T + 5; // this does not get executed till we call init(), so no error here
},
...
}; // <- creation of FooNS object is complete
FooNS.init();
Причина ошибки ERROR2:
Браузер останавливается при первой ошибке (ERROR1) и больше не выполняет JS в этом потоке выполнения.,Из-за этого объект FooNS не создается правильно, что приводит к ошибке при вызове FooNS.doSomething(5)