Глобальные функции в javascript

Я новичок в JS и пытаюсь понять глобальные и частные функции. Я понимаю глобальные и локальные переменные. Но если у меня есть HTML с именем test.html и 2 js файлами с именем test1.js и test2.js. Теперь я включаю test1.js и test2.js в test.html и вызываю функции, написанные в test2.js внутри test1.js и test.html.

Функции, которые я написал в test2.js, находятся в этой форме

function abc(){...}

function pqr(){...} etc.

Являются ли эти функции глобальными? Если они есть, как я могу не сделать их глобальными и при этом обращаться к ним в test1.js и test.html?

Как я прочитал глобальные функции или глобальные переменные не так ли?

Ответ 1

Все в JS связано с областью. Поэтому, если вы определяете function непосредственно в файле, он будет привязан к объекту window, т.е. Будет глобальным.

Чтобы сделать это "private", вам нужно создать объект, который будет содержать эти функции. Вы правы, что засорение глобальной области является плохим, но вы должны положить что-то в глобальную область, чтобы иметь доступ к ней, библиотеки JS делают то же самое, и нет другого способа обхода. Но подумайте о том, что вы указали в глобальной области, для вашей "библиотеки" должен быть более чем один объект.

Пример:

MyObject = {
    abc: function(...) {...},
    pqr: function(...) {...}
    // other functions...
}

Для вызова abc для где-то, будь то тот же файл или другой файл:

MyObject.abc(...);

Ответ 2

var SomeName = function() {

    var function1 = function (number) {
        return number+1;
    }

    var anotherFunction = function (number) {
        return number+2;
    }

    return {
        function1: function (number) {
            return function1(number);
        },
        function2: function (number) {
            return anotherFunction(number);
        }
    }
}();

вызов

console.log(SomeName.function1 (1));//logs 2

console.log(SomeName.function2 (1));//logs 3

Ответ 3

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

Пример:

//these are global variables
foo = 123;
var ABC = 'school';

//these are "private" variables
test = function(){
  var foo = 123
}

(function(){
  var ABC = 'school';
}).call(this);

Поскольку глобальные переменные в каждом файле будут частью объекта window, вы можете обращаться к ним между файлами. Это важно при создании "приватных" переменных, которые вы добавляете var. Это говорит о переопределении любых глобальных переменных в текущей "оболочке". Если у меня есть глобальная переменная foo и я снова определю ее в функции с var они будут разделены.

var foo = 123;
(function(){
  var foo = 987; //this foo is separate from the above foo
}).call(this);

Если у вас есть "обертка" и вы хотите определить глобальную функцию, вы можете сделать это следующим образом:

window.foo = 123;
(function(){
  window.foo = 123;
}).call(this);

Обе функции будут делать то же самое.

Лично я предпочитаю помещать все в обертку и определять глобальные переменные только тогда, когда они мне нужны, используя window.

(function(){

  //all code goes here

  //define global variable
  window.foo = 123;

})call(this);

Ответ 4

Если вы не понимаете, почему глобальные переменные являются плохими, то почему вы пытаетесь их избежать?

Глобальные функции не обязательно плохие. Что плохого в том, что кто-то и что-то изменил.

В общем, поскольку вы новичок в Javascript, хорошо начать с глобальных функций, распространяемых через несколько файлов javascript, которые вы добавляете в свой html файл с помощью тегов script.

Когда вы переходите от новичка к промежуточному, вам нужно будет изучить некоторое "модульное" решение (я лично рекомендую RequireJS).

Пока что вы можете сделать более простой шаблон модуля:

var T1 = function() {
   return < some module object >
})(); // notice the parenthesis

Google "Шаблон модуля Javascript".

Также см. этот ответ.