Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Плюс перед функцией (https://javascript.ru/forum/misc/51738-plyus-pered-funkciejj.html)

SunYang 17.11.2014 18:08

Плюс перед функцией
 
Заметил в bootstrap.js вот такую форму:

+function ($) {

...

}(jQuery);


Плюс перед функцией - для чего это нужно?

Erolast 17.11.2014 18:13

Аналог
(function($) {

})(jQuery);

Чтобы функция интерпретировалась как Function Expression и не требовала имени.

bes 18.11.2014 00:08

http://learn.javascript.ru/function-...ion-expression
Цитата:

Общее правило таково:
Если браузер видит function в основном потоке кода - он считает, что это Function Declaration.
Если же function идёт в составе более сложного выражения, то он считает, что это Function Expression.
здесь всё хорошо, понятно и удобно для дальнейшего использования

а кто-нибудь пытался вывести это чисто формально, основываясь только на спецификации, например, на примере того же унарного плюса?

http://es5.javascript.ru/x11.html#x11.4.6
Цитата:

UnaryExpression : + UnaryExpression
http://es5.javascript.ru/x11.html#x11.4
Цитата:

UnaryExpression :
PostfixExpression
delete UnaryExpression
void UnaryExpression
typeof UnaryExpression
++ UnaryExpression
-- UnaryExpression
+ UnaryExpression
- UnaryExpression
~ UnaryExpression
! UnaryExpression
как сюда вообще может попасть FunctionExpression, если на вход этому оператору оно не ожидается?

с оператором группировки немного получше
http://es5.javascript.ru/x11.html#x11.1.6
Цитата:

PrimaryExpression : ( Expression )
получше, если самому додумать, что Expression - это некое произвольное выражение, по крайней мере, формального и неформального определения для Expression в тексте спецификации я не нашёл

попутно возник ещё один вопрос: обычно приоритет операторов смотрел где-нибудь типа здесь
https://developer.mozilla.org/en-US/...tor_Precedence
в спецификации это где-то обозначено?

bes 18.11.2014 00:28

Цитата:

Сообщение от bes
как сюда вообще может попасть FunctionExpression, если на вход этому оператору оно не ожидается?

здесь нормально
http://es5.javascript.ru/x11.html#x11.3
Цитата:

PostfixExpression :
LeftHandSideExpression
LeftHandSideExpression [no LineTerminator here] ++
LeftHandSideExpression [no LineTerminator here] --
http://es5.javascript.ru/x11.html#x11.2
Цитата:

LeftHandSideExpression :
NewExpression
CallExpression

NewExpression :
MemberExpression
new NewExpression

MemberExpression :
PrimaryExpression
FunctionExpression
MemberExpression [ Expression ]
MemberExpression . IdentifierName
new MemberExpression Arguments


Часовой пояс GMT +3, время: 23:06.