Funkcje

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`
``