Как сделать область видимости в javascript?

Привет!

Не уверен, что многие знают ответ на этот вопрос.

В функции определяется своя область видимости — это некий объект, свойства которого и есть переменные определенные в функции.

Вопрос: можно ли обратиться к этому объекту?
Иначе, есть ли доступ к полному контролю области видимости?

Спасибо!

P.S. навеяно этим habrahabr.ru/qa/19385/
  • Вопрос задан
  • 3265 просмотров
Решения вопроса 1
spmbt
@spmbt
Можно обратиться только к глобальному объекту, через window, self или this (последнее — для функции — не метода объекта). Даже для внутренних функций со своим скоупом this будет window.
<script>

(function(){
	var aa = function(){
		console.log(window==this, this)
	}
	aa()
})()

</script>
Локальный скоуп недоступен. Сделано, видимо, для возможности написания независимых скриптов на одной странице или, другими словами, для невлияния другого скрипта на первый через скоуп каким-либо образом (например, стирать переменные из него).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
taliban
@taliban
php программист
Вы никак не обратитесь к списку внешних видимых переменных, лишь зная их имя, либо если функция находится на верхнем уровне, тогда сможете пребрать свойства window.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Возможно я не совсем понял вопроса, но…

var data = (function(){
    var a = "provate string";
    var b = "public string;";

    return {
        a: a
    };
})();


следующим способом обычно достигают имитации приватных свойств. Обычно используется для приватных методов/свойств и экспортирует объект содержащий геттеры и сеттеры.

Если вам необходимо иметь доступ ко всем внутренним переменным, то имеет смысл публиковать их через this.prototype. Тогда вам останется лишь создать инстанс вашей функции и обращаться к опубликованным свойствам. Возможно можно ограничиться лишь this но тут я вам точно не скажу. Надо пробовать.
Ответ написан
Skpd
@Skpd
Возможно я что-то не правильно понимаю, но область видимости у функции это либо объект window, либо любой другой объект, переданный при помощи .call() или .apply().
Поэтому мы всегда знаем какой это объект и имеем доступ к полному контролю видимости.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект