Baseline Widely available
Die function
Deklaration erstellt eine Bindung einer neuen Funktion mit einem gegebenen Namen.
Sie können Funktionen auch mithilfe des function
Ausdrucks definieren.
function calcRectArea(width, height) {
return width * height;
}
console.log(calcRectArea(5, 6));
// Expected output: 30
Syntax
function name(param0) {
statements
}
function name(param0, param1) {
statements
}
function name(param0, param1, /* â¦, */ paramN) {
statements
}
Parameter
name
Der Funktionsname.
param
Optional
Der Name eines formalen Parameters für die Funktion. Die maximale Anzahl von Argumenten variiert in verschiedenen Engines. Für die Syntax der Parameter siehe die Referenz für Funktionen.
statements
Optional
Die Anweisungen, die den Rumpf der Funktion bilden.
Eine function
Deklaration erstellt ein Function
Objekt. Jedes Mal, wenn eine Funktion aufgerufen wird, gibt sie den Wert zurück, der durch die zuletzt ausgeführte return
Anweisung angegeben wird, oder undefined
, wenn das Ende des Funktionsrumpfes erreicht ist. Siehe Funktionen für detaillierte Informationen zu Funktionen.
function
Deklarationen verhalten sich wie eine Mischung aus var
und let
:
let
sind in strict mode Funktionen auf den am nächstgelegenen umgebenden Block beschränkt.let
können Funktionsdeklarationen auf der obersten Ebene eines Moduls oder innerhalb von Blöcken im strict mode nicht durch eine andere Deklaration neu deklariert werden.var
werden Funktionsdeklarationen auf oberster Ebene eines Skripts (strict oder non-strict) zu Eigenschaften von globalThis
. Funktionsdeklarationen auf oberster Ebene eines Skripts oder Funktionsrumpfes (strict oder non-strict) können durch eine andere function
oder var
neu deklariert werden.Warnung: Im Nicht-strict Mode verhalten sich Funktionsdeklarationen innerhalb von Blöcken seltsam. Deklarieren Sie Funktionen innerhalb von Blöcken nur, wenn Sie sich im strict mode befinden.
Funktionen können bedingt deklariert werden â das heiÃt, eine Funktionsanweisung kann innerhalb einer if
Anweisung geschachtelt werden. Im Nicht-strict Mode sind die Ergebnisse jedoch inkonsistent zwischen Implementierungen.
console.log(
`'foo' name ${
"foo" in globalThis ? "is" : "is not"
} global. typeof foo is ${typeof foo}`,
);
if (false) {
function foo() {
return 1;
}
}
// In Chrome:
// 'foo' name is global. typeof foo is undefined
//
// In Firefox:
// 'foo' name is global. typeof foo is undefined
//
// In Safari:
// 'foo' name is global. typeof foo is function
Die Wirkung auf den Gültigkeitsbereich und das Hoisting ändert sich nicht, unabhängig davon, ob der if
-Körper tatsächlich ausgeführt wird.
console.log(
`'foo' name ${
"foo" in globalThis ? "is" : "is not"
} global. typeof foo is ${typeof foo}`,
);
if (true) {
function foo() {
return 1;
}
}
// In Chrome:
// 'foo' name is global. typeof foo is undefined
//
// In Firefox:
// 'foo' name is global. typeof foo is undefined
//
// In Safari:
// 'foo' name is global. typeof foo is function
Im strict mode sind Funktionsdeklarationen auf Blockebene auf diesen Block beschränkt und werden an die Spitze des Blocks gehoben.
"use strict";
{
foo(); // Logs "foo"
function foo() {
console.log("foo");
}
}
console.log(
`'foo' name ${
"foo" in globalThis ? "is" : "is not"
} global. typeof foo is ${typeof foo}`,
);
// 'foo' name is not global. typeof foo is undefined
Hoisting
Funktionsdeklarationen in JavaScript werden an die Spitze des umgebenden Funktions- oder globalen Gültigkeitsbereichs gehoben. Sie können die Funktion verwenden, bevor Sie sie deklariert haben:
hoisted(); // Logs "foo"
function hoisted() {
console.log("foo");
}
Beachten Sie, dass Funktionsausdrücke nicht gehoben werden:
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function () {
console.log("bar");
};
Neu-Deklarationen
Ob function
Deklarationen im gleichen Gültigkeitsbereich neu deklariert werden können, hängt davon ab, in welchem Gültigkeitsbereich sie enthalten sind.
Auf oberster Ebene eines Skripts verhalten sich function
Deklarationen wie var
und können durch eine andere function
oder var
neu deklariert werden, aber nicht durch let
, const
, oder class
.
function a(b) {}
function a(b, c) {}
console.log(a.length); // 2
let a = 2; // SyntaxError: Identifier 'a' has already been declared
Wenn function
Deklarationen durch var
neu deklariert werden, überschreibt der Initialisierer der var
Deklaration immer den Funktionswert, unabhängig von ihrer relativen Position. Dies liegt daran, dass Funktionsdeklarationen vor allen Initialisierern gehoben werden, sodass der Initialisierer später kommt und den Wert überschreibt.
var a = 1;
function a() {}
console.log(a); // 1
Auf der obersten Ebene des Funktionsrumpfes verhält sich function
auch wie var
und kann neu deklariert werden oder denselben Namen wie ein Parameter haben.
function foo(a) {
function a() {}
console.log(typeof a);
}
foo(2); // Logs "function"
Auf der obersten Ebene eines Moduls oder eines Blocks im strict mode verhalten sich function
Deklarationen wie let
und können durch keine andere Deklaration neu deklariert werden.
// Assuming current source is a module
function foo() {}
function foo() {} // SyntaxError: Identifier 'foo' has already been declared
"use strict";
{
function foo() {}
function foo() {} // SyntaxError: Identifier 'foo' has already been declared
}
Eine function
Deklaration innerhalb eines catch
Blocks kann nicht denselben Namen wie der catch
-gebundene Bezeichner haben, selbst im Nicht-strict Mode.
try {
} catch (e) {
function e() {} // SyntaxError: Identifier 'e' has already been declared
}
Beispiele Verwendung von funktion
Der folgende Code deklariert eine Funktion, die den Gesamtbetrag an Verkäufen zurückgibt, wenn die Anzahl der verkauften Einheiten von drei Produkten angegeben ist.
function calcSales(unitsA, unitsB, unitsC) {
return unitsA * 79 + unitsB * 129 + unitsC * 699;
}
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4