Noch ein Unterschied ist, das diese Function definitions nur in
Funktionen oder Global auftreten dürfen. Soetwas währe beispielsweise
falsch:
1 | if(1){
|
2 | function quarter(number){
|
3 | return number / 4;
|
4 | }
|
5 | }
|
Ich empfehle am Anfang aller JS Dateien "use strict"; hinzuschreiben,
damit soetws einen Fehler produziert.
Funktion expressions können hingegen überal stehen, wo sonstige
Expressions stehen. Diese werden auch gerne für Callback funktionen
verwendet:
1 | function doSomethingWheneverYouFeelLikeIt(callback){ // <- Function definition
|
2 | var args = Array.prototype.slice.call(arguments,1);
|
3 | setTimeout(function(){ // <- Function expression
|
4 | alert(callback.apply(null,args));
|
5 | },Math.random()*1000*60);
|
6 | }
|
7 |
|
8 | doSomethingWheneverYouFeelLikeIt(function quarter(number){ // <- function expression
|
9 | return number / 4;
|
10 | },20);
|
Ab JavaScript version ES6 (ECMAScript 2015) gibt es viele
Verbesserungen, wie den spread operator, rest arguments und arrow
functions:
1 | function doSomethingWheneverYouFeelLikeIt( callback, ...args ){ // ...args are restarguments
|
2 | setTimeout(
|
3 | () => alert(callback(...args)), // <- arrow function, ...args is spread operator
|
4 | Math.random() * 1000 * 60
|
5 | );
|
6 | }
|
7 |
|
8 | doSomethingWheneverYouFeelLikeIt( x=>x/4, 20 ); // x=>x/4 is a arrow function
|