Лучший подход избегает конфликтов имен для javascript-функций в отдельных файлах .js?

Есть ли предпочтительный подход для выделения функций в файле .js из потенциальных конфликтов с другими .js файлами на странице из-за похожих имен?

Например, если у вас есть функция

function AddTag(){}

в Core.js, а затем существует

function AddTag(){}

в Orders.js они конфликтуют. Как лучше всего структурировать ваши .js файлы и какие соглашения об именах вы использовали бы для их изоляции?

Спасибо

Ответ 1

Я ограничиваю область действия этого файла.

(function () {
    var AddTag = function AddTag () {
    };
}());

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

var thisNamespace = function () {
    var AddTag = function AddTag () {
        …
    };
    var foo = function foo() {
        AddTag();
        …
    };
    var bar = function bar() {
        …
    };
    return {
        foo: foo,
        bar: bar
    }
}();

Ответ 2

Вы можете использовать "namespacing". Как этот

File1.js:

var Orders = {}
(function(o) {
     o.function1 = function() {}
     o.function2 = function() {}
 })(Orders);

File2.js

var Sales = {}
(function(o) {
     o.function1 = function() {}
     o.function2 = function() {}
 })(Sales);

Вы можете вызвать их следующим образом:

Sales.function1();
Orders.function1();

В общем случае не используйте глобальные функции/переменные. Читайте о шаблоне модуля javascript здесь http://yuiblog.com/blog/2007/06/12/module-pattern/