В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Первое известно как именованная функция, где второе известно как анонимная функция.
ключевое практическое различие находится в том, когда можно использовать функцию суммы. Поскольку 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;
}
перестанет работать, так как в то время, когда первая строка выполнился, переменной сумме еще не присвоили функция.
Именованные функции проанализированы и присвоены своим именам, прежде чем выполнение начнется, который является, почему именованная функция может быть использована в коде, который предшествует его определению.
Переменные присвоились, функция кодом может явно только использоваться в качестве функции, как только выполнение продолжилось мимо присвоения.
Первое имеет тенденцию использоваться по нескольким причинам:
причины вставки Точки с запятой
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; }
} ...
Первый является именованным функциональным оператором, второй присваивает выражение анонимной функции переменной.
функциональный оператор сразу добавляется к своему объему - Вы не должны выполнять его перед способностью назвать его, таким образом, это работает:
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;
}
, Но это может сбивать с толку, так как два имени находятся на самом деле в различных объемах и относятся к разным вещам.
Различие...
Это - неназванная функция
var sum = function (x, y) {
return x+y;
}
Поэтому, если Вы предупреждаете (суммируют); Вы получаете "функцию (x, y) {возвращают x + y;}" (неназванный), В то время как это - именованная функция:
function sum(x, y) {
return x+y;
}
, Если Вы предупреждаете (суммируют); теперь Вы получаете "функцию , сумма (x, y) {возвращают x + y;}" (имя является суммой)
называвший справку функций при использовании профилировщика, потому что профилировщик может сказать, Вы функционируете сумма время выполнения... и так далее вместо времени выполнения неизвестных функций... и так далее
вот другой пример: функционируйте sayHello (имя) {предупреждение ('привет' + имя)}
теперь, предположите, что Вы хотите, изменяют onclick событие кнопки, такой как, он говорит "привет мир",
Вы не можете записать:
yourBtn.onclik = sayHello ('мир'), потому что необходимо обеспечить ссылку на функцию.
тогда можно использовать вторую форму: yourBtn.onclick = функция () {sayHello ('workld');}
пз: жаль о моем плохом английском языке!
Они имеют в виду ту же самую вещь. Это - просто синтаксический сахар. Последний является 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
Два фрагмента кода, которые вы разместили там, почти для всех целей будут вести себя одинаково.
Однако разница в поведении заключается в том, что во втором варианте эта функция может быть вызвана только после этого места в коде.
В первом варианте функция доступна для кода, который выполняется выше, где функция объявлена.
Это связано с тем, что во втором варианте функция назначается переменной foo во время выполнения. В первом случае функция назначается этому идентификатору foo во время синтаксического анализа.
Дополнительная техническая информация
В Javascript есть три способа определения функций.