Форматы функций JavaScript - PullRequest
       0

Форматы функций JavaScript

2 голосов
/ 30 августа 2011

Я видел файлы JavaScript, отформатированные двумя разными способами, и я понятия не имею, в чем различия.

<script>

function foo () { /* a function */ }

</script>

name = { 

foo: function () { /* a function */ }
foo2: function () { /* a different function */ }
}

В чем разница между этими двумя способами написания JavaScript и почему я должен сделать одинВересе другой.

Ответы [ 2 ]

5 голосов
/ 30 августа 2011

Второй метод создает функции как члены объекта name.Это дает эффект инкапсуляции их внутри name, а не создания их внутри глобального пространства имен.JavaScript может быть очень проблематичным с точки зрения именования переменных и функций из-за способа использования глобального пространства имен.Например, если забыть использовать ключевое слово var при объявлении переменной внутри функции, у переменной будет глобальная область действия вместо области действия функции.

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

Обычный шаблон, который вы увидите (и рекомендованный в Дугласа КрокфордаJavascript: The Good Parts ):

var myApplication = {
  var1: 'some variable';
  var2: 'some other variable';
  var3: 12345

  foo1: function() {
    // do something
  },
  foo2: function() {
    // do something else
  }
};

По сути, единственная глобальная переменная, которую я здесь создал, это myApplication, и это вряд ли вызовет конфликт имен с чем-либо еще в глобальномПространство имен.Я могу назвать свои функции, как:

myApplication.foo1();
myApplication.foo2();
0 голосов
/ 30 августа 2011

Вторая форма называется пространством имен.

Он позволяет вам определять функции и переменные внутри него.

Думайте об этом как о классе в Java,

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

В вашем примере это позволяет вам определить 2 функции с именем foo.

Тот, кто глобален (первый) Одно существо внутри объекта с именем name (второе)

если вы хотите где-нибудь позвонить второму, вы должны предоставить пространство имен например:

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