Область видимости переменных (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, время: 06:50. |