Javascript: шаблон, чтобы избежать глобальных переменных - PullRequest
2 голосов
/ 22 февраля 2011

Я думаю, что это простой вопрос. Представьте, что у вас есть страница, которая инициализирует переменную JS с именем channel:

<html>
<script>
$(document).ready(function() {
   ...
   var channel = new Channel();
   channel.send("helo");
}
</script>
<body>
    <div id="placeholder"></content>
</body>
</html>

Страница также содержит div с id = "placeholder", содержимое которого загружается с использованием AJAX. Этот внешний контент должен иметь доступ к переменной channel.

Есть ли полезная практика или совет о том, где хранить переменную? Следующий код работает, но мне не нравится:

<html>
<script>
    var channel;
    $(document).ready(function() {
       ...
       channel = new Channel();
       channel.send("helo");
    }
</script>
...
</html>

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Нет, в этом случае другого пути нет, так как глобальная область является единственной областью, которую разделяют оба сценария ( edit: ну, я думаю, это зависит от того, как вы на самом деле добавляете контент. Как вы это делаете? )

Единственное, что вы можете сделать, это минимизировать число глобальных переменных, используя объект в качестве пространства имен:

var your_namespace = {};
$(document).ready(function() {
   ...
   your_namespace.channel = new Channel();
   your_namespace.channel.send("helo");
}
0 голосов
/ 22 февраля 2011

Вы можете поместить функцию загрузки AJAX в анонимную функцию, которая выполняется, когда DOM загружен вместе с переменной канала.И то, и другое будет ограничено только анонимной функцией и областями действия в ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...