AngReload, я похоже понял. Объекты не имеют своего лексического окружения, которое можно записать в [[Scope]], а являются переменными в лексическом окружении той функции внутри которой находятся.
Когда sayHi объявляется, она получает лексическое окружение и [[Scope]] (как я читал неотделимый и неизменяемый) в который попадает глобальный объект window (забавно, но получается что window это одновременно и объект, и функция) и при вызове не найдя переменную внутри себя, обращается сразу в window.
А я правильно понимаю, что у объекта нет лексического окружения ?
Т.е. когда функция вызывается по идее она забиндина на объект user и там есть параметр x, но функция его не замечает, а идёт в window сразу.
var x = 111;
var user = {
x: 222,
sayHi: function() {
alert( x );
}
};
user.sayHi(); //выдаёт 111
А я правильно понимаю, что у объекта нет лексического окружения ?
Т.е. когда функция вызывается по идее она забиндина на объект user и там есть параметр x, но функция его не замечает, а идёт в window сразу.
var x = 111;
var user = {
x: 222,
sayHi: function() {
alert( x );
}
};
user.sayHi(); //выдаёт 111