Область видимости переменных (this)
Всем привет!
В тесте встретил вот такой скрипт:
var x = 3;
var foo = {
x: 2,
baz: {
x: 1,
bar: function() {
return this.x;
}
}
};
var go = foo.baz.bar;
alert(go());
alert(foo.baz.bar());
И мне не совсем понятно, почему в итоге алерт покажет "3" затем "1". Может кто-нибудь из знатоков объяснить? Заранее благодарю :thanks: |
сначала зис смотрит в окно а потом в фу
|
Артем163,
может так вам что-то прояснит
var x = 3;
var foo = {
x: 2,
baz: {
x: 1,
bar: function() {
alert(this)
return this.x;
}
}
};
var go = foo.baz.bar;
alert(go());
alert(foo.baz.bar());
и это
var x = 3;
var foo = {
x: 2,
baz: {
x: 1,
bar: function() {
return this.x;
}
}
};
var go = function() {
return this.x;
};
alert(go());
alert(foo.baz.bar());
|
var x = 3;
var foo = {
x: 2,
baz: {
x: 1,
bar: function() {
alert(showThis.call(this));
return this.x;
}
}
};
var go = foo.baz.bar;
function showThis() {
return this === window ? '[object global]' : JSON.stringify(this);
}
go();
foo.baz.bar();
|
Потому что контекст функции определяется во время её вызова. Если функция принадлежит объекту, то this будет ссылаться на него, иначе - на глобальный объект:
function test () {
alert(this.property);
}
var x = {
test: test, property: "x"
};
var y = {
test: test, property: "y"
};
window.property = "window";
x.test();
y.test();
test();
|
| Часовой пояс GMT +3, время: 17:17. |