Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
function
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Diefunction Deklaration erstellt eineBindung einer neuen Funktion mit einem gegebenen Namen.
Sie können Funktionen auch mithilfe desfunction Ausdrucks definieren.
In diesem Artikel
Probieren Sie es aus
function calcRectArea(width, height) { return width * height;}console.log(calcRectArea(5, 6));// Expected output: 30Syntax
function name(param0) { statements}function name(param0, param1) { statements}function name(param0, param1, /* …, */ paramN) { statements}Parameter
nameDer Funktionsname.
paramOptionalDer Name eines formalen Parameters für die Funktion. Die maximale Anzahl von Argumenten variiert in verschiedenen Engines. Für die Syntax der Parameter siehe dieReferenz für Funktionen.
statementsOptionalDie Anweisungen, die den Rumpf der Funktion bilden.
Beschreibung
Einefunction Deklaration erstellt einFunction Objekt. Jedes Mal, wenn eine Funktion aufgerufen wird, gibt sie den Wert zurück, der durch die zuletzt ausgeführtereturn Anweisung angegeben wird, oderundefined, wenn das Ende des Funktionsrumpfes erreicht ist. SieheFunktionen für detaillierte Informationen zu Funktionen.
function Deklarationen verhalten sich wie eine Mischung ausvar undlet:
- Wie
letsind in strict modeFunktionen auf den am nächstgelegenen umgebenden Block beschränkt. - Wie
letkönnen Funktionsdeklarationen auf der obersten Ebene eines Moduls oder innerhalb von Blöcken im strict mode nicht durch eine andere Deklarationneu deklariert werden. - Wie
varwerden Funktionsdeklarationen auf oberster Ebene eines Skripts (strict oder non-strict) zu Eigenschaften vonglobalThis. Funktionsdeklarationen auf oberster Ebene eines Skripts oder Funktionsrumpfes (strict oder non-strict) können durch eine anderefunctionodervarneu deklariert werden. - Wie beide können Funktionsdeklarationen neu zugewiesen werden, aber Sie sollten dies vermeiden.
- Im Gegensatz zu beiden werden Funktionsdeklarationen zusammen mit ihrem Wertgehoben und können überall in ihrem Gültigkeitsbereich aufgerufen werden.
Block-level Funktion Deklaration
Warnung:ImNicht-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 einerif 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 functionDie Wirkung auf den Gültigkeitsbereich und das Hoisting ändert sich nicht, unabhängig davon, ob derif-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 functionImstrict 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 undefinedHoisting
Funktionsdeklarationen in JavaScript werdenan 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, dassFunktionsausdrücke nicht gehoben werden:
notHoisted(); // TypeError: notHoisted is not a functionvar notHoisted = function () { console.log("bar");};Neu-Deklarationen
Obfunction 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 sichfunction Deklarationen wievar und können durch eine anderefunction odervar neu deklariert werden, aber nicht durchlet,const, oderclass.
function a(b) {}function a(b, c) {}console.log(a.length); // 2let a = 2; // SyntaxError: Identifier 'a' has already been declaredWennfunction Deklarationen durchvar neu deklariert werden, überschreibt der Initialisierer dervar 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); // 1Auf der obersten Ebene des Funktionsrumpfes verhält sichfunction auch wievar 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 sichfunction Deklarationen wielet und können durch keine andere Deklaration neu deklariert werden.
// Assuming current source is a modulefunction foo() {}function foo() {} // SyntaxError: Identifier 'foo' has already been declared"use strict";{ function foo() {} function foo() {} // SyntaxError: Identifier 'foo' has already been declared}Einefunction Deklaration innerhalb einescatch Blocks kann nicht denselben Namen wie dercatch-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
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-function-definitions> |