Вопрос про замыкание
или не про замыкание.
Почему здесь функция видит переменную aaa window.aaa="aaa"; var f=function() { alert( aaa ); } А здесь функция не видит переменную userName var user = { userName: 'Василий', display: function() { alert(userName); } } user.display(); структуры то аналогичны window={ aaa: ""aaa", f: function() { alert( aaa ), ........... } Или они не аналогичны? |
Цитата:
Получить значение можно так: "this.userName". И не трогали бы вы глобальный объект window. |
да как получить я знаю.
А this.userName к чьему лексическому окружению относится? |
к твоему user
var user = { userName: 'Василий', display: function() { alert(user.userName); } } user.display(); |
Цитата:
В node.js, скажем, ту же функцию выполняет объект global. На практике стараются по возможности избегать манипуляций с глобальным контекстом, потому что сотня-другая видных отовсюду переменных создают путаницу и проблемы с очисткой памяти. Инкапсуляция, все дела. |
Цитата:
Все переменные и параметры функций являются свойствами объекта переменных LexicalEnvironment. Каждый запуск функции создает новый такой объект. На верхнем уровне им является «глобальный объект», в браузере – window. При создании функция получает системное свойство [[Scope]], которое ссылается на LexicalEnvironment, в котором она была создана. При вызове функции, куда бы её ни передали в коде – она будет искать переменные сначала у себя, а затем во внешних LexicalEnvironment с места своего «рождения». |
лексическое окружение области видимости, твой user ссылается на window, а твой userName на window.userName, а тебе надо на window.user.userName, так о каком лексическом окружении ты говоришь, непонятно, теперь понятно ? )) Вообщем твой userName ищет сначала внутри твоей функции, а потом глобально в window, если ты не указываешь в каком окружении искать
var user = { userName: 'Василий', display: function() { alert(window.user.userName); } } user.display(); или так var user = { userName: 'Василий', display: function() { var userName = "Петя" alert(userName); } } user.display(); или так var userName = "Федя" var user = { userName: 'Василий', display: function() { alert(userName); } } user.display(); ну или так var user = { userName: 'Василий', display: function() { alert(this.userName); } } user.display(); |
так разве структуру можно считать областью видимости? Область видимости - это про функции
Про работу у меня вопросов нет, это теоретический вопрос |
Часовой пояс GMT +3, время: 05:56. |