Различие между двумя функциями? (“функционируют x” по сравнению с “var x = функция”) [дубликат]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

50
задан Community 23 May 2017 в 02:34
поделиться

7 ответов

Первое известно как именованная функция, где второе известно как анонимная функция.

ключевое практическое различие находится в том, когда можно использовать функцию суммы. Поскольку example:-

var z = sum(2, 3);
function sum(x, y) {
    return x+y;
}

z присвоен 5, тогда как this:-

var z = sum(2, 3);
var sum = function(x, y) {
    return x+y;
}

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

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

Переменные присвоились, функция кодом может явно только использоваться в качестве функции, как только выполнение продолжилось мимо присвоения.

54
ответ дан AlanObject 7 November 2019 в 11:03
поделиться

Первое имеет тенденцию использоваться по нескольким причинам:

  1. имя "подводит итог" шоу в stacktrace, который делает отладку легче во многих браузерах.
  2. имя "сумма" может использоваться в теле функции, которое облегчает использовать для рекурсивных функций.
  3. объявления функции "подняты" в JavaScript, так в первом случае, функция, как гарантируют, будет определена точно однажды.
  4. причины вставки Точки с запятой

    var f = function (x) { return 4; }
    
    (f)
    

    для присвоения 4 f.

существует несколько протестов иметь в виду все же. Не делайте

  var sum = function sum(x, y) { ... };

на IE 6, так как он приведет к двум создаваемым функциональным объектам. Особенно сбивающий с толку, если Вы делаете

  var sum = function mySym(x, y) { ... };

Согласно стандартной, функциональной сумме (x, y) {...} Не может появиться в, если блок или тело цикла, таким образом, различные интерпретаторы будут рассматривать

  if (0) {
    function foo() { return 1; }
  } else {
    function foo() { return 2; }
  }
  return foo();

по-другому. В этом случае необходимо сделать

  var foo;
  if (0) {
    foo = function () { return 1; }
  } ...
12
ответ дан Mike Samuel 7 November 2019 в 11:03
поделиться

Первый является именованным функциональным оператором, второй присваивает выражение анонимной функции переменной.

функциональный оператор сразу добавляется к своему объему - Вы не должны выполнять его перед способностью назвать его, таким образом, это работает:

var y = sum(1, 2);

function sum(x, y) {
   return x + y;
}

, Но выражение function только присвоен переменной, когда код выполнен, таким образом, это не работает:

// Error here because the function hasn't been assigned to sum yet.
var y = sum(1, 2);

var sum = function(x, y) {
   return x + y;
}

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

преимущество именованного функционального оператора, то, что отладчики будут в состоянии отобразить имя. Хотя, можно назвать выражения function:

var sum = function sum(x, y) {
   return x + y;
}

, Но это может сбивать с толку, так как два имени находятся на самом деле в различных объемах и относятся к разным вещам.

6
ответ дан Daniel James 7 November 2019 в 11:03
поделиться

Различие...

Это - неназванная функция

var sum = function (x, y) {
    return x+y;
}

Поэтому, если Вы предупреждаете (суммируют); Вы получаете "функцию (x, y) {возвращают x + y;}" (неназванный), В то время как это - именованная функция:

function sum(x, y) {
        return x+y;
}

, Если Вы предупреждаете (суммируют); теперь Вы получаете "функцию , сумма (x, y) {возвращают x + y;}" (имя является суммой)

называвший справку функций при использовании профилировщика, потому что профилировщик может сказать, Вы функционируете сумма время выполнения... и так далее вместо времени выполнения неизвестных функций... и так далее

1
ответ дан user19745 7 November 2019 в 11:03
поделиться

вот другой пример: функционируйте sayHello (имя) {предупреждение ('привет' + имя)}

теперь, предположите, что Вы хотите, изменяют onclick событие кнопки, такой как, он говорит "привет мир",

Вы не можете записать:

yourBtn.onclik = sayHello ('мир'), потому что необходимо обеспечить ссылку на функцию.

тогда можно использовать вторую форму: yourBtn.onclick = функция () {sayHello ('workld');}

пз: жаль о моем плохом английском языке!

0
ответ дан stefano m 7 November 2019 в 11:03
поделиться

Они имеют в виду ту же самую вещь. Это - просто синтаксический сахар. Последний является IMO, более разоблачающим из того, что действительно делает JavaScript; т.е. "сумма" является просто переменной, инициализированной с функциональным объектом, который может тогда быть заменен чем-то еще:

$ js
js> function sum(x,y) { return x+y; }
js> sum(1,2);
3
js> sum=3
3
js> sum(1,2);
typein:4: TypeError: sum is not a function
js> sum
3
-5
ответ дан niXar 7 November 2019 в 11:03
поделиться

Два фрагмента кода, которые вы разместили там, почти для всех целей будут вести себя одинаково.

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

В первом варианте функция доступна для кода, который выполняется выше, где функция объявлена.

Это связано с тем, что во втором варианте функция назначается переменной foo во время выполнения. В первом случае функция назначается этому идентификатору foo во время синтаксического анализа.

Дополнительная техническая информация

В Javascript есть три способа определения функций.

  1. Ваш первый пример - объявление функции . Здесь используется оператор «функция» для создания функции. Функция становится доступной во время синтаксического анализа и может быть вызвана в любом месте этой области. Вы все еще можете сохранить его в переменной или свойстве объекта позже.
  2. Второй фрагмент кода показывает выражение функции . Это включает использование оператора «функции» для создания функции - результат этого оператора может быть сохранен в любой переменной или свойстве объекта. Таким образом, выражение функции является мощным. Выражение функции часто называют «анонимной функцией», потому что у него не обязательно должно быть имя
  3. . Третий способ определения функции - это конструктор «Function ()» , который не показан в вашем исходном посте. Не рекомендуется использовать это, так как он работает так же, как eval (), у которого есть свои проблемы.
3
ответ дан 7 November 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: