В чем причина использования такого синтаксиса (0, _.Em) (); - PullRequest
10 голосов
/ 16 марта 2012

При изучении скриптов google plusone я много раз видел следующий синтаксис:

(0, _.Em)();

Предполагая, что _.Em - это функция, приведенная выше, может вызвать эту функцию, что довольно очевидно.Если, с другой стороны, оно будет неопределенным, разве результат не будет таким же, как если бы вы просто _.Em()?

Может кто-нибудь пролить свет на идею использования такого синтаксиса?

1 Ответ

8 голосов
/ 16 марта 2012

По сути, этот синтаксис позволяет вызывать _.Em() в контексте объекта window вместо _.

Предположим, у вас есть этот код:

Foo = function() {
    this.foo = "foo";
};

Foo.prototype.Em = function() {
    alert(this.foo);
};

var _ = new Foo();

Выдача _.Em() приведет к вызову Em() в контексте _. Внутри функции ключевое слово this будет ссылаться на _, поэтому будет напечатано foo.

Выпуск (0, _.Em)() отделяет вызов метода от объекта и выполняет вызов в глобальном контексте. Внутри функции ключевое слово this будет ссылаться на window, поэтому будет напечатано undefined, поскольку window не имеет свойства foo.

Вы можете проверить разницу между двумя синтаксисами в этой скрипке .

...