Вопрос из разряда спортивного интереса. Тестировал в среде Node.
Суть:
- в области глобального объекта:
this.k = {myObj:'ok'};
var k;
k = {}; // this.k == {} => this.k и var k суть одно и то же,
// когда находимся внутри глобального объекта (this === global)
- а теперь то же самое в области любого другого объекта, который мы создадим из функции:
var MyObj = function(){
this.k = {myObj:'ok'};
var k;
k = {};
console.log(k, this.k);
}
var obj = new MyObj(); // this.k == {myObj:'ok'} => this.k и var k
// суть разные ячейки, когда находимся внутри созданного нами объекта obj
Собственно почему такое разное поведение? Почему в глобальной области все переменные "прилипают" к глобальному объекту как его свойства, а внутри нашего объекта var k так себя не ведет (переменная k не является свойством (this.k = undefined) даже когда мы находимся внутри функции во время ее выполнения, вот:
var z = function(){
var k;
k ={n:'no'};
console.log(this.k);
}
var t = new z(); // => undefined undefined