2015-02-24 4 views
-1

Я просто посмотрел на underscore.js source code и когда я полосу исходного кода вплоть до ее голой, содержащей IIFE это выглядит следующим образом:Является ли синтаксис синтаксиса underscore.js IIFE действительным?

(function() { 

}.call(this)); 

Я всегда использовал синтаксис с внешними скобками (function() {}).call(this); и спрашиваю, если этот синтаксис также действительны и распространены?

+0

Да, этот синтаксис правильный :) –

+1

Почему внешние скобки ошибочны? –

+0

@ FrédéricHamidi Я ожидал, что внешний паратезис необходим, чтобы анонимная функция могла рассматриваться как выражение, например. '(function() {}). call (this)' или '+ function() {} .call (this)'. Но почему '(function() {} .call (this))' execute but 'function() {} .call (this)' does not? –

ответ

2

Если вы спрашиваете о местонахождении внешнего ) конкретно, то находится ли он сразу после закрывающей скобки или после всего выражения doesn't matter for the most part. В любом случае не имеет значения, как выполняется IIFE.

Единственное отличие здесь .call(this), которое вызывается как член выражения функции - типичный IIFE имеет только внутренние скобки сразу после закрытия. Причина использования .call(this) подробно описана в ряде других ответов, включая this one.

+0

Но 'function() {} .call (this) 'не может быть выполнен, я знаю трюк через' + function() {} .call (this) ', но почему его обертывание внутри paranthesis изменит, как выполняется внутреннее выражение? –

+3

@Nick Russler: Объединяя его в круглых скобках или '+' IN, он сообщает парсеру, что это выражение функции, а не объявление функции. – BoltClock

+0

Так что это всего лишь синтаксис. Мне показалось странным, что включение paranthesis может изменить способ выполнения внутреннего кода. –

Смежные вопросы