Dapatkah fungsi dalam mengakses javascript variabel luar?

JavaScript memungkinkan pengembang untuk mendefinisikan fungsi di dalam fungsi lain, sebuah teknik yang dikenal sebagai fungsi bersarang. Fungsi bersarang dapat berguna dalam berbagai situasi, termasuk mengatur kode ke dalam blok logis, meningkatkan keterbacaan fungsi besar, dan membuat metode pribadi yang hanya dapat diakses di dalam fungsi yang memuatnya.

Pada artikel ini, kita akan menjelajahi dasar-dasar fungsi bersarang di JavaScript, termasuk sintaksnya, perbedaannya dari fungsi tradisional, dan cara menggunakannya secara efektif dalam kode Anda

 

Menggunakan fungsi bersarang di JavaScript

Dalam JavaScript, suatu fungsi dapat didefinisikan di dalam fungsi lain. Fungsi seperti itu disebut fungsi bersarang atau fungsi dalam. Fungsi bersarang memiliki akses ke variabel dan parameter fungsi luar, serta ke variabel dan fungsi global. Mereka dapat digunakan untuk mengatur dan menyusun kode Anda, dan untuk menghindari konflik penamaan

 

Fungsi orang tua dan anak

Kita dapat memiliki fungsi bersarang di mana kita memiliki fungsi induk - fungsi luar - dan fungsi anak - fungsi dalam - di mana fungsi Berikut adalah contoh fungsi bersarang di JavaScript di mana kita menambahkan satu ke argumen fungsi luar dan

function outerFunction(x) {
    let y = x + 1;

    function innerFunction(z) {
        let w = z + y;
        return w;
    }

    return innerFunction;
}

let result = outerFunction(1)(2);
console.log(result);

Keluaran

4
_

Dalam contoh ini, fungsi luar outerFunction() mengambil argumen tunggal x dan mendefinisikan variabel lokal y. Fungsi luar juga mendefinisikan fungsi dalam

4
0, yang mengambil argumen tunggal
4
1 dan mendefinisikan variabel lokal
4
2. Fungsi dalam mengembalikan nilai
4
_2

Fungsi luar mengembalikan fungsi dalam sebagai hasilnya. Ini berarti bahwa fungsi dalam adalah penutupan, yaitu fungsi yang mempertahankan akses ke variabel dan parameter fungsi luar bahkan setelah fungsi luar menyelesaikan eksekusinya.

BACA JUGA. Telusuri di Objek JSON Secara Rekursif di JavaScript [SOLVED]

Untuk memanggil fungsi dalam, Anda perlu memanggil fungsi luar terlebih dahulu, lalu memanggil fungsi dalam sebagai properti dari hasil fungsi luar. Ini dikenal sebagai metode chaining

Iklan

Pada contoh di atas, kita memanggil fungsi luar dengan argumen

4
4, lalu memanggil fungsi dalam sebagai properti dari hasil fungsi luar, dengan argumen
4
5. Fungsi dalam menghitung nilai
4
2 sebagai
4
7, dan mengembalikan hasilnya

 

Fungsi tingkat yang sama

Kita dapat memiliki banyak fungsi dalam lingkungan JavaScript tertentu atau tingkat cakupan global, dan kita mungkin perlu memanggil salah satu fungsi tersebut di dalam fungsi lain. Untuk menggambarkan hal ini, kita dapat membuat tiga fungsi -

4
8,
4
9 dan
function add(a, b) {
    return a + b;
}

function divide(a, b) {
    return a / b;
}

function stat(a, b) {
    let adx = add(a, b);
    let dex = divide(a, b);

    return (adx * dex) ** b;
}

console.log(stat(3, 5));
0 - dan menyertakan
4
8 dan
4
9 dalam fungsi
function add(a, b) {
    return a + b;
}

function divide(a, b) {
    return a / b;
}

function stat(a, b) {
    let adx = add(a, b);
    let dex = divide(a, b);

    return (adx * dex) ** b;
}

console.log(stat(3, 5));
0 meskipun, semuanya berada dalam lingkup global yang sama

function add(a, b) {
    return a + b;
}

function divide(a, b) {
    return a / b;
}

function stat(a, b) {
    let adx = add(a, b);
    let dex = divide(a, b);

    return (adx * dex) ** b;
}

console.log(stat(3, 5));

Keluaran

2548.0396799999994

Dalam kode ini, fungsi

4
8 dan
4
9 bersarang di dalam fungsi
function add(a, b) {
    return a + b;
}

function divide(a, b) {
    return a / b;
}

function stat(a, b) {
    let adx = add(a, b);
    let dex = divide(a, b);

    return (adx * dex) ** b;
}

console.log(stat(3, 5));
0. Ini berarti bahwa mereka hanya tersedia dalam lingkup fungsi
function add(a, b) {
    return a + b;
}

function divide(a, b) {
    return a / b;
}

function stat(a, b) {
    let adx = add(a, b);
    let dex = divide(a, b);

    return (adx * dex) ** b;
}

console.log(stat(3, 5));
0 dan tidak dapat dipanggil dari luarnya. Meskipun, semua fungsi berada dalam level yang sama, kami dapat memiliki fungsi bersarang dengan memanggilnya dalam suatu fungsi

BACA JUGA. Menggunakan try catch finally di Node. js [Praktik Terbaik]

 

Fungsi anonim batin

Pendekatan lain yang dapat kita lihat dengan fungsi bersarang di JavaScript menggunakan fungsi anonim di dalam suatu fungsi. Fungsi anonim akan berfungsi sebagai fungsi dalam di dalam fungsi luar. Untuk lebih memahami, mari kita ilustrasikan fungsi luar -

function add(a, b) {
    return a + b;
}

function divide(a, b) {
    return a / b;
}

function stat(a, b) {
    let adx = add(a, b);
    let dex = divide(a, b);

    return (adx * dex) ** b;
}

console.log(stat(3, 5));
8 - yang menggunakan argumen
function add(a, b) {
    return a + b;
}

function divide(a, b) {
    return a / b;
}

function stat(a, b) {
    let adx = add(a, b);
    let dex = divide(a, b);

    return (adx * dex) ** b;
}

console.log(stat(3, 5));
9, dan di dalam fungsi ini kita memiliki fungsi anonim yang menggunakan

function outer(a) {
    return function (b) {
        return a / b;
    };
}

console.log(outer(3)(5));

Keluaran

0.6

Kode ini menunjukkan penggunaan fungsi bersarang, di mana fungsi anonim dalam didefinisikan dan dikembalikan oleh fungsi

2548.0396799999994
0 luar. Fungsi dalam memiliki akses ke variabel dalam fungsi luar, dalam hal ini, variabel
function add(a, b) {
    return a + b;
}

function divide(a, b) {
    return a / b;
}

function stat(a, b) {
    let adx = add(a, b);
    let dex = divide(a, b);

    return (adx * dex) ** b;
}

console.log(stat(3, 5));
9. Ini dikenal sebagai penutupan

 

Bagaimana nesting memengaruhi ruang lingkup?

Fungsi yang ditentukan di tingkat atas kode Anda memiliki cakupan global, sedangkan fungsi yang ditentukan di dalam fungsi lain memiliki cakupan lokal. Mari kita periksa contoh ini

Iklan

var migrating = true;
var fly = function(num) {
    var sound = "Flying";
    function wingFlapper() {
        console.log(sound)
    }
    for (var i = 0; i < num; i++) {
        wingFlapper();
    }
};
function quack(num) {
    var sound = "Quack";
    var quacker = function() {
        console.log(sound)
    };
    for (var i = 0; i < num; i++) {
        quacker();
    }
}
if(migrating) {
    quack(4);
    fly(4)
}

Mari visualisasikan ini sebagai gambar untuk memahami dampak ruang lingkup

Dapatkah fungsi dalam mengakses javascript variabel luar?

Di sini semua yang didefinisikan di tingkat atas kode memiliki cakupan global. Jadi

2548.0396799999994
_2 dan
2548.0396799999994
3 keduanya adalah variabel global. Tapi ingat
2548.0396799999994
_2 didefinisikan hanya setelah ekspresi fungsi
2548.0396799999994
5 dievaluasi

BACA JUGA. Contoh Metode pop Array JavaScript

2548.0396799999994
6 didefinisikan oleh deklarasi fungsi dalam fungsi
2548.0396799999994
2. Jadi ruang lingkupnya adalah keseluruhan fungsi dan didefinisikan di seluruh
2548.0396799999994
2 badan fungsi

2548.0396799999994
_9 didefinisikan oleh ekspresi fungsi dalam fungsi
2548.0396799999994
3. Jadi ruang lingkupnya adalah keseluruhan
2548.0396799999994
_3 fungsi tetapi itu ditentukan hanya setelah ekspresi fungsi dievaluasi hingga akhir badan fungsi

Perhatikan bahwa aturan kapan Anda bisa merujuk ke suatu fungsi adalah sama di dalam suatu fungsi seperti di tingkat atas. Artinya, dalam suatu fungsi, jika Anda menentukan fungsi bertingkat dengan

function outer(a) {
    return function (b) {
        return a / b;
    };
}

console.log(outer(3)(5));
2, fungsi bertingkat tersebut ditentukan di mana saja di dalam isi fungsi. Di sisi lain, jika Anda membuat fungsi bertingkat menggunakan 
function outer(a) {
    return function (b) {
        return a / b;
    };
}

console.log(outer(3)(5));
3, maka fungsi bertingkat tersebut ditentukan hanya setelah ekspresi fungsi dievaluasi

 

Ringkasan

Fungsi bersarang dapat berguna dalam beberapa situasi. Misalnya, Anda dapat menggunakannya untuk membuat fungsi utilitas yang hanya diperlukan dalam konteks tertentu. Anda juga dapat menggunakannya untuk mengenkapsulasi logika kompleks dan menyembunyikannya dari kode lainnya

Iklan

Perlu diingat bahwa fungsi bersarang dapat berdampak negatif pada kinerja kode Anda karena membuat cakupan baru dan menambahkan overhead ke pemanggilan fungsi. Anda harus menggunakannya dengan bijaksana dan hanya jika diperlukan

BACA JUGA. Hapus Elemen dari Set di JavaScript [SOLVED]

Fungsi bersarang dapat membantu Anda mengatur dan menyusun kode Anda, dan dapat memberikan cara ampuh untuk membuat penutupan dan merangkum logika kompleks

Bisakah fungsi dalam mengakses variabel luar?

Fungsi Inti Python atau Fungsi Bersarang dapat mengakses variabel fungsi luar serta variabel global.

Bisakah fungsi JavaScript mengakses variabel luar?

Variabel yang dideklarasikan secara Global (di luar fungsi apa pun) memiliki Cakupan Global . Variabel global dapat diakses dari mana saja dalam program JavaScript. Variabel yang dideklarasikan dengan var , let dan const sangat mirip ketika dideklarasikan di luar blok.

Bisakah Anda mengakses variabel di dalam fungsi JavaScript?

Karena javascript, dan sebagian besar bahasa, variabel cakupan, Anda tidak dapat mengakses variabel yang dideklarasikan di dalam fungsi dari luar fungsi . Variabel milik ruang lingkup fungsi saja, bukan ruang lingkup global. Untungnya, fungsi mewarisi ruang lingkup pemanggilnya.

Bisakah Anda mengakses variabel di dalam suatu fungsi?

Dalam Python dan sebagian besar bahasa pemrograman, variabel yang dideklarasikan di luar fungsi dikenal sebagai variabel global. Anda dapat mengakses variabel tersebut di dalam dan di luar fungsi, karena memiliki cakupan global .