İşlevler

Fonksiyon, bir dizi iş akışını gerçekleştirmek için kullanılan modüler, yeniden kullanılabilir ilişkili görevler (örneğin, bağımsız değişkenlere dayalı bir değeri hesaplama ve döndürme) işlevine atanmıştır. Tüm ilkel olmayan değerlerde olduğu gibi, nesnelerdir. Bunlar, adlandırılabildiği benzersiz nesnelerdir. verilerini bağımsız değişkenler biçiminde ileterek, ve bir değer döndürür.

İşlevler "birinci sınıf" olarak düşünülür Diğer bir deyişle, benzersiz davranışlarına rağmen her yerde, JavaScript nesneleriyle aynı bağlamlara sahip olmalıdır. Örneğin, bir fonksiyon bir değişkene atanmış, diğer işlevlere bağımsız değişken olarak iletilmiş ve başka işlevler tarafından oluşturulur.

function myFunction() {
   console.log( "This is my function." );
};

Bir nesnenin özelliği olarak tanımlanan işlev, buna “yöntem” denir. var kullanılarak tanımlanan değişkenlerde olduğu gibi, kapsayan işlev dışında yapılan işlev bildirimleri global nesne olarak ayarlayın.

İşlev bildirimleri

İşlev bildirimi ("işlev ifadesi" veya "işlev tanımı" olarak da adlandırılır) bir adlandırılmış işlev oluşturur. Bu işlev, kapsayıcı kapsamındaki başka bir yerde çağrılabilir. İşlev bildirimleri, function anahtar kelimeden ve ardından gelen bir anahtar kelimeden oluşur. tanımlayıcı, parantez içinde virgülle ayrılmış parametrelerden oluşan bir liste ve bir blok ifadesi yerine "işlev gövdesi." Gerekirse sık sık noktalı virgülle biter; çünkü bir fonksiyon bildirimi, Noktalı virgüller ASI ile tahmin edilebilir.

function myFunction() {
   console.log( "This is my function." );
};

myFunction();
> "This is my function."

JavaScript'in ilk tasarım kararlarının bir parçası olarak, işlev bildirimleri aynı eski kaldırma var ile tanımlanan değişkenler olarak davranışı, yani bir işlev bildirimi en üste kaldırılmıştır ve beyandan önce aşağıdaki sonuçları içerir:

"use strict";
{
    myFunction();
    function myFunction() {
        console.log( "This is my function." );
    };
}
> "This is my function."

Yüksek düzey modu dışında, işlev beyanlar JavaScript'in eski kapsamını kullanıyorsa davranışı, yani bir işlev bildiriminin en yakın çevreleyen işlev:

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

Yüksek düzey modunda, işlev bildirimleri let veya const:

"use strict";
{
    function myFunction() {
        console.log( "This is my function." );
    };
}

myFunction();
> Uncaught ReferenceError: myFunction is not defined

İşlev çağırma

Değişkenlerde olduğu gibi, bir işlev tanımlanırken kullanılan tanımlayıcı, değeri için sembolik bir addır. Bir işleve yalnızca tanımlayıcıyla referans vermek şu sonuçları döndürür: yalnızca işlev nesnesini ekler ve içerdiği işlevi yürütmez:

function myFunction() {
   console.log( "This is my function." );
};

myFunction;
> myFunction() {
   console.log( "This is my function." );
}

İşlev gövdesinin içindeki kodu yürütmek için işlevi çağrılayın (veya çalın) işlev adını eşleşen bir parantez çiftiyle ekleyin:

function myFunction() {
    console.log( "My function has been executed." );
}

myFunction();
> "My function has been executed."

İşlev tanımındaki parametreler, işlev çağrıldığında işlev gövdesine aktarılabilecek değerlerdir. Bir işlev çağrıldığında parantez içindeki değerler "bağımsız değişkenler"dir (yine de "bağımsız değişkenler" hem bağımsız değişkenleri hem de parametreleri belgeleri):

function myFunction( myParameter ) {
   console.log( `The value is: ${ myParameter }.` );
};

myFunction( "this string" );
> "The value is: this string."

Beklenen bir bağımsız değişken atlanırsa, sonuç parametresi bir undefined değeri, çünkü parametre işlev gövdesine tanımlanmıştır ancak bir değerle başlatılmadı:

function myFunction( myParameter ) {
   console.log( `The value is: ${ myParameter }.` );
};

myFunction();
> "The value is: undefined."

Varsayılan parametre değerlerini, her şeyi aynı şekilde başlatarak ayarlayabilirsiniz. Atama operatörü (=) ve ardından bir değer gelecek şekilde bir değişkeni başlatın. Şu durumda: daha sonra bu işlev için bir bağımsız değişken belirtirse, bu yeni değer varsayılan değer:

function myFunction( myParameter = "omitted" ) {
   console.log( `The value is: ${ myParameter }.` );
};

myFunction( "this string" );
> "The value is: this string."

myFunction();
> "The value is: omitted."

Ok olmayan bir gövdenin gövdesi fonksiyonunun aynı zamanda sıfır-endekslenmiş, dizi benzeri arguments nesne işlevin devre dışı bırakılmasına bakılmaksızın, bağımsız değişken olarak iletilen değerleri içeren tanım, parametreleri belirtir:

function myFunction() {
   console.log( arguments );
};

myFunction( 3, true, "My string" );
> Arguments { 0: 3, 1: true, 2: "My string", … }

Çeşitli işlevler

arguments nesnesi, aşağıdakiler gibi temel değişkenlik fonksiyonlar oluşturmanızı sağlar: değişken sayıda bağımsız değişken kabul edin:

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

Bununla birlikte, değişken fonksiyonlara yönelik bu yaklaşım, modern JavaScript'te nadiren kullanılır. bahsedeceğim. Daha modern ve okunabilir reklamlar genellikle rest parametresinin söz dizimi, Bu değişken, herhangi bir bağımsız değişken içeren bir dizi olarak başlatılmış adlandırılmış bir parametre oluşturur açıkça belirtilenlerin dışında:

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"

parameter bağlamasından farklı olarak, dinlenme parametresi söz dizimi, ok işlevi parametreleriyle beklendiği gibi çalışır:

function myOuterFunction() {
    let myInnerArrowFunction = ( ...myParams ) => {
        console.log( myParams[ 0 ] );
    }
    myInnerArrowFunction( true );
};

myOuterFunction( false );
> true

let myArrowFunction = ( ...myParams ) => {
    console.log( myParams[ 0 ] );
};

myArrowFunction( true );
> true`
``