Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Сделать переменную javascript доступной только для функций в том же файле .js

Автор вопроса: user1402171Ответов: 4

Я немного новичок в Javascript, и я застрял на этом одном элементе. Может кто-нибудь показать мне, как сделать переменную javascript доступной только для файла .js, в котором она находится.

ПРИМЕР:

Скажем, у меня есть два файла .js, PG1 и PG2. PG1 содержит var channel = Channel01;

PG2 содержит переменную с тем же именем, но с другим введенным значением Variable (часть после знака равенства) (var channel = Channel02)

Я не хочу, чтобы функция1 на PG1 использовала переменную на PG2 или чтобы функция2 на PG2 использовала переменную на PG1.

Я также вызываю эти функции с отдельной HTML-страницы.

Проблема: все мои функции в конечном итоге используют только одну переменную, независимо от того, на какой странице они находятся. (например, function1 и function2 используют var channel = channel01)

Вопрос: Как я могу ограничить функции на странице 1, чтобы использовать только переменные на этой странице .js

Спасибо!

javascriptvariablesglobal-variableslocal-variables

Ответы

Ответ 1 · рейтинг 7 · mpm

шаблон модуля:

var myModule = (function(exports){

    var x = "foo";

    exports.myFunction = function(){
        alert(x);
    };

})(typeof exports!="undefined" && exports instanceof Object ? exports : window );

myFunction будет доступно в области window в браузере.

ИЗМЕНИТЬ

цитирую автора: "Я также вызываю эти функции с отдельной HTML-страницы".

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

var myModule не нужен и не экспортируется, это просто для совместимости с AMD:

(function(exports){

    var x = "foo";

    exports.myFunction = function(){
        alert(x);
    };

})(window);

теперь x для myFunction существует только в замыкании, но myFunction по-прежнему может обращаться к x в глобальной области видимости. любое определение x в глобальной области или любой другой области не повлияет на x = "foo"

Ответ 2 · рейтинг 9 · alex

Оберните все это в выражение немедленно вызываемой функции, которое фактически даст файлу собственную область действия.

(function() {
   // Your file's contents live here.
})();

Ответ 3 · рейтинг 4 · Mattias Buelens

Если вам на самом деле не нужно выставлять какую-либо из ваших переменных в глобальную область, вы можете обернуть весь свой код JavaScript в мгновенно вызываемое функциональное выражение или IIFE. Здесь вы определяете выражение анонимной функции и немедленно вызываете его. В результате вместо того, чтобы загрязнять глобальную область видимости своими переменными, вы держите их в чистоте и порядке в локальной области видимости этой функции.

(function() {
    var channel = Channel01;

    // Put the rest of your PG1 code here, for example:

    function init() {
        channel.open();
    }

    init();
})();

Затем вы можете аналогичным образом обернуть свой код PG2 во IIFE. В результате два сценария не будут иметь общих переменных, кроме уже определенных глобальных переменных, таких как Channel01 и Channel02.

Ответ 4 · рейтинг 1 · alfonsob

Хотя это и не прямой ответ на ваш вопрос, это связано и важно, так как его отсутствие может загрязнить другие модули. Если вы не используете ключевое слово var, переменная находится в глобальной области видимости, т.е.

(function () {
   x = 'foo'; //x is on the global scope and can be seen everywhere
})()

(function () {
   var y = 'bar'; //y is local to this function
})()

Я надеюсь, что я не продублировал то, что кто-то сказал выше, но я не видел, чтобы это упоминалось

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы