Вопрос про замыкание
или не про замыкание.
Почему здесь функция видит переменную 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, время: 11:14. |