В настоящее время я провожу эксперимент с областью видимости и подъемом в JS. Здесь у меня есть два примера, которые меня смущают по-разному. Сначала я назначил анонимную функцию переменной с именем parent. Очевидно, что возвращенная дочерняя функция имеет доступ к своей внешней области функции. поэтому он может получить доступ к текстовой переменной. Это ясно и просто. Вот код.
var parent = function() {
var text = 'i can access the container';
return function() {
alert(text);
}
}();
parent();
Позже я хотел вернуть объект вместо функции, у которой есть метод. Этот метод не находится непосредственно в теле немедленно вызываемой функции, а определен внутри возвращаемого объекта. Но он может получить доступ к переменной с именем private, которая содержит строковое значение. Как получилось, что эта переменная находится в области действия этого литерального метода объекта??
var parent = (function() {
var text = 'private variable';
return {
prop: 'i am the property',
method: function() {
alert('i can access ' + text);
}
}
})();
parent.method();