(функция () {}) против функции () {} ();

Рассмотрим следующие два примера:

Первый:

var x = (function(){  return 786;  }());

Второй:

var y = function(){  return 786;  }();

Я знаю, что мы не можем использовать function(){ return 786; }(); напрямую как функцию самовызова anoomymus, но теперь, поскольку я назначаю ее переменной x, я могу использовать эту функцию. Так,

  • Есть ли разница в результате поведения переменной x в первом и втором методе?

person user31782    schedule 08.11.2016    source источник
comment
Нет, разницы нет. Это то же самое, что var x = (786); и var x = 786;. Группирование значений в круглые скобки вернет последнее значение. Пример: var x = (5, function(){ return 786; }()); установит x = 786.   -  person Ismael Miguel    schedule 08.11.2016
comment
@IsmaelMiguel Но тогда почему javascript разрешает (function(){ return 786; }());, но не function(){ return 786; }();?   -  person user31782    schedule 08.11.2016
comment
Это так ... Если вы запустите его, оба сделают то же самое. Это в точности то же самое, что var x = [786][0]; и var x = {x: 786}.x;, с точки зрения конечного результата и (в некотором роде) синтаксиса. То же, что var x = {x: function(){ return 786; }}.x(); или var x = {x: function(){ return 786; }()}.x;.   -  person Ismael Miguel    schedule 08.11.2016
comment
@IsmaelMiguel Вы хотите сказать, что мы можем использовать function(){ return 786; }() везде, где ожидается выражение, например (//some expression)   -  person user31782    schedule 08.11.2016
comment
да. Это в очень возобновленной форме и (возможно, слегка) неточно. Я не нашел примера, где его нельзя использовать. Но это не значит, что нет.   -  person Ismael Miguel    schedule 08.11.2016


Ответы (1)


Нет. Никакой разницы не будет.

Заключение функции в круглые скобки преобразует их из function declaration в expression, и допустимо, чтобы действительный expression запускался сам по себе.

var x = (function(){  return 786;  }());

Здесь анонимная функция, заключенная в круглые скобки, представляет собой выражение, которое выполняет функцию и возвращает 786, присваивая его var x. Поскольку анонимная функция является допустимым выражением, ее также можно запускать отдельно.

var y = function(){  return 786;  }();

Здесь полный оператор является присваиванием expression и, таким образом, он выполняется и сохраняет значение 786 в var y.

Для дальнейшего чтения ознакомьтесь со следующими ссылками:

/ questions / 3384504 / location-of-parenthesis-for-auto -исполнение-анонимных-javascript-функций

http://kangax.github.io/nfe/#function-statements

person n4m31ess_c0d3r    schedule 08.11.2016