Funkcja to modułowy blok instrukcji wielokrotnego użytku używany do wykonywania powiązane zadania, takie jak obliczanie i zwracanie wartości na podstawie argumentów przekazanej funkcji. Tak jak w przypadku wszystkich wartości niepodstawowych, są obiektami. Są to unikatowe obiekty, które można nazwać. do wykonywania kodu, przekazywania danych w postaci argumentów, i zwraca wartość.
Funkcje są określane jako „pierwsza klasa”. więc mimo wyjątkowego działania mogą być używane takich samych kontekstów jak każdy inny obiekt JavaScript. Na przykład funkcja może być przypisane do zmiennej, przekazywane jako argument do innych funkcji i zwracane za pomocą innych funkcji.
function myFunction() {
console.log( "This is my function." );
};
Funkcja zdefiniowana jako właściwość obiektu to
nazywanych zwykle „metodą”. Tak jak w przypadku zmiennych zadeklarowanych za pomocą funkcji var
,
deklaracje funkcji utworzone poza funkcją zamykającą są dodawane do funkcji
obiektu globalnego jako metod.
Deklaracje funkcji
deklaracja funkcji (nazywana też „instrukcją funkcji” lub „definicją funkcji”)
tworzy funkcję nazwaną, która może zostać wywołana w innym miejscu w zakresie nadrzędnym.
Deklaracje funkcji składają się ze słowa kluczowego function
, po którym następuje znak
identyfikatora, listy parametrów rozdzielonych przecinkami w nawiasach oraz
instrukcja blokowa nazwana
„treści funkcji”. Często spotykane są deklaracje funkcji, które nie używają
kończy się średnikiem; ponieważ deklaracja funkcji jest instrukcją, która kończy się
średniki można uzyskać za pomocą ASI.
function myFunction() {
console.log( "This is my function." );
};
myFunction();
> "This is my function."
W ramach reagowania na wczesne decyzje
projektowe JavaScript deklaracje funkcji
podlegają temu samemu starszemu podnoszeniu
zachowanie jako zmienne zadeklarowane za pomocą funkcji var
, co oznacza, że deklaracja funkcji
jest przenoszona na górę zakresu i może być wywoływana przed zadeklarowaniem jako
niezależnie od tego, czy ten zakres jest objęty trybem ścisłym:
"use strict";
{
myFunction();
function myFunction() {
console.log( "This is my function." );
};
}
> "This is my function."
Poza trybem ścisłym funkcja deklaracje korzystają ze starszego zakresu zakresu JavaScriptu zachowanie, co oznacza, że deklaracja funkcji jest ograniczona do najbliższego nawiasu funkcja:
function myFunction() {
function myNestedFunction() {
console.log( "This is my nested function." );
}
myNestedFunction();
};
myFunction();
> "This is my nested function."
myNestedFunction();
>Uncaught ReferenceError: myNestedFunction is not defined
W trybie ścisłym deklaracje funkcji
są ograniczone do najbliższego bloku nadrzędnego, tak jak w przypadku zmiennych zadeklarowanych za pomocą funkcji
let
lub const
:
"use strict";
{
function myFunction() {
console.log( "This is my function." );
};
}
myFunction();
> Uncaught ReferenceError: myFunction is not defined
Wywoływanie funkcji
Podobnie jak zmienne, identyfikator używany przy deklarowaniu funkcji działa jak nazwa symboliczna dla wartości. Zwracanie odwołania do funkcji za pomocą samego identyfikatora tylko obiekt funkcji i nie wykonuje zawartej w niej funkcji:
function myFunction() {
console.log( "This is my function." );
};
myFunction;
> myFunction() {
console.log( "This is my function." );
}
Aby wykonać kod w treści funkcji, wywołaj (lub wywołaj funkcję) , wpisując nazwę funkcji w odpowiedniej parze nawiasów:
function myFunction() {
console.log( "My function has been executed." );
}
myFunction();
> "My function has been executed."
Parametry w definicji funkcji działają jako zmienne zastępcze dla wartości, które mogą być przekazywane do treści funkcji po jej wywołaniu. Wartości w nawiasach przy wywoływaniu funkcji to „argumenty” (chociaż możesz zobaczyć „argumenty”, używane do opisania argumentów i parametrów w niektórych dokumentacja):
function myFunction( myParameter ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction( "this string" );
> "The value is: this string."
Jeśli oczekiwany argument zostanie pominięty, wynikowy parametr będzie zawierał
undefined
, ponieważ parametr jest deklarowany w treści funkcji, ale
niezainicjowane z użyciem wartości:
function myFunction( myParameter ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction();
> "The value is: undefined."
Możesz ustawić domyślne wartości parametrów, inicjując je w taki sam sposób
zainicjuj zmienną: operator przypisania (=
), po którym następuje wartość. Jeśli
później określ argument dla tej funkcji, nowa wartość zastąpi argument
wartość domyślna:
function myFunction( myParameter = "omitted" ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction( "this string" );
> "The value is: this string."
myFunction();
> "The value is: omitted."
Treść bez strzałki
również funkcja ma dostęp do zmiennej o wartości zerowej,
obiekt arguments
podobny do tablicy
zawierające wszelkie wartości przekazywane jako argumenty niezależnie od tego, czy funkcja
definicja określa parametry:
function myFunction() {
console.log( arguments );
};
myFunction( 3, true, "My string" );
> Arguments { 0: 3, 1: true, 2: "My string", … }
Funkcje różne
Obiekt arguments
umożliwia tworzenie podstawowych funkcji zmiennych, które mogą
Akceptuj zmienną liczbę argumentów:
function myFunction() {
let result = "";
for (let i = 0; i < arguments.length; i++) {
result += arguments[i] + " - ";
}
console.log( result );
};
myFunction( "My first string", "My second string", "my third string" );\
> "My first string - My second string - my third string - "
Jednak takie podejście do funkcji zmiennych jest rzadko stosowane we współczesnym języku JavaScript w Google Cloud. Częściej stosowane są im bardziej nowoczesne i czytelne składni parametrów spoczynku, tworzący nazwany parametr zainicjowany jako tablica z argumentami poza tymi wyraźnie określonymi:
function myFunction( mySeparator, ...myStrings ) {
console.log( myStrings.join( mySeparator ) );
};
myFunction( " - ", "My first string", "My second string", "my third string" );
> "My first string - My second string - my third string"
W odróżnieniu od powiązania parameter
składnia parametrów spoczynku działa zgodnie z oczekiwaniami z parametrami funkcji strzałki:
function myOuterFunction() {
let myInnerArrowFunction = ( ...myParams ) => {
console.log( myParams[ 0 ] );
}
myInnerArrowFunction( true );
};
myOuterFunction( false );
> true
let myArrowFunction = ( ...myParams ) => {
console.log( myParams[ 0 ] );
};
myArrowFunction( true );
> true`
``