Klousur JavaScript

JavaScript variabel miliklokalatauGlobalLingkungan akses.

Variabel global dapat diakses melaluiKlosurMencapai lokal (pribadi).

Variabel global

Fungsi dapat mengakses fungsiInternalYang diddefiniskan, seperti:

Contoh

function myFunction() {
    var a = 4;
    return a * a;
} 

Coba Sendiri

Namun fungsi dapat mengakses fungsiEksternalVariabel yang diddefiniskan, seperti:

Contoh

var a = 4;
function myFunction() {
    return a * a;
} 

Coba Sendiri

Pada contoh terakhir ini,a adalahGlobalVariabel.

Pada halaman web, variabel global termasuk objek window.

Variabel global dapat digunakan dan diubah oleh semua skrip di halaman (dan di jendela).

Pada contoh pertama,a adalahLokalVariabel.

Variabel lokal hanya dapat digunakan di dalam fungsi yang didefiniskannya. Bagi kode fungsi lain dan kode skrip yang lainnya, ia tak terlihat.

Variabel global dan lokal dengan nama yang sama adalah variabel yang berbeda. Perubahan salah satunya tidak akan mengubah yang lain.

tanpakata kunci var Variabel yang dibuat selalu global, walaupun mereka dibuat di dalam fungsi.

Kehidupan variabel

Variabel global hidup sepanjang aplikasi Anda (jendela, halaman web).

Variabel lokal hidup untuk sementara. Mereka dibuat saat pemanggilan fungsi dan dihapus saat fungsi selesai.

Dilema penimbangan counter

Jika Anda ingin menggunakan variabel untuk menghitung, dan Anda ingin counter ini dapat digunakan oleh semua fungsi.

Anda dapat menggunakan variabel global dan fungsi untuk menaikkan counter:

Contoh

// Pemulihan counter
var counter = 0;
// Fungsi untuk menaikkan counter
function add() {
  counter += 1;
}
// Pemanggilan add() tiga kali
add();
add();
add();
// Jika ini adalah 3

Coba Sendiri

Solusi di atas memiliki masalah: kode mana pun di halaman dapat mengubah counter tanpa memanggil add().

Untuk fungsi add(), counter harus lokal untuk mencegah kode lain mengubahnya:

Contoh

// Pemulihan counter
var counter = 0;
// Fungsi untuk menaikkan counter
function add() {
  var counter = 0; 
  counter += 1;
}
// Pemanggilan add() tiga kali
add();
add();
add();
// Jika ini adalah 3, tapi itu adalah 0.

Coba Sendiri

Ia tidak berguna, karena kita menampilkan counter global bukannya counter lokal.

Dengan membiarkan fungsi mengembalikan dirinya sendiri, kita dapat menghapus counter global dan mengakses counter lokal:

Contoh

// Fungsi untuk menaikkan counter
function add() {
  var counter = 0; 
  counter += 1;
  return counter;
}
// Pemanggilan add() tiga kali
add();
add();
add();
// Jika ini adalah 3, tapi itu adalah 1.

Coba Sendiri

Ia tidak berguna, karena setiap kali kita memanggil fungsi, counter lokal akan direset.

Fungsi internal JavaScript dapat memecahkan masalah ini.

Fungsi berada di dalam JavaScript

Semua fungsi memiliki hak mengakses lingkungan akses global.

Faktanya, di JavaScript, semua fungsi memiliki hak mengakses lingkungan akses di atasnya.

JavaScript mendukung fungsi yang berada di dalam fungsi. Fungsi yang berada di dalam fungsi dapat mengakses lingkungan akses di atasnya.

在本例中,内部函数 plus() 可以访问父函数中的 counter 计数器变量:

Contoh

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();     
    return counter; 
}

Coba Sendiri

Dengan cara ini, masalah penghitung dapat diselesaikan, jika kita dapat mengaksesnya dari luar. plus() fungsi.

Kami masih perlu menemukan fungsi yang dieksekusi sekali. counter = 0 metodenya.

Kami memerlukan klosur (closure).

Klousur JavaScript

Ingat fungsi yang dieksekusi otomatis? Apa yang akan dilakukan fungsi ini?

Contoh

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
add();
add();
add();
// Penghitung saat ini adalah 3 

Coba Sendiri

Pengertian Contoh

Variabel add Atribut adalah nilai kembalian fungsi yang dieksekusi otomatis.

Fungsi yang dieksekusi sekali ini. Dia mengatur penghitung menjadi nol (0) dan mengembalikan ekspresi fungsi.

Maka add menjadi fungsi. Bagian yang paling “menarik” adalah kemampuannya untuk mengakses penghitung di lingkungan asal.

Ini disebut JavaScript Klosur. Ini membuat fungsi memiliki “Pribadi“Variabel” menjadi memungkinkan.

Penghitung dilindungi oleh lingkungan fungsi anonim ini dan hanya dapat diubah menggunakan fungsi add.

Klosur adalah fungsi yang memiliki hak mengakses lingkungan asal, bahkan setelah fungsi induk ditutup.