Menyimpan nilai dalam variabel adalah konsep dasar dalam pemrograman. "Cakupan" variabel menentukan kapan itu tersedia dan tidak tersedia di seluruh program Anda. Memahami ruang lingkup variabel dalam JavaScript adalah salah satu kunci untuk membangun fondasi yang kokoh dalam bahasa ini Show
Artikel ini akan menjelaskan cara kerja sistem pelingkupan JavaScript. Anda akan belajar tentang berbagai cara untuk mendeklarasikan variabel, perbedaan antara cakupan lokal dan cakupan global, dan tentang sesuatu yang disebut "pengangkatan" — kekhasan JavaScript yang dapat mengubah deklarasi variabel yang tampak tidak bersalah menjadi bug halus Lingkup VariabelDalam JavaScript, ruang lingkup variabel dikendalikan oleh lokasi deklarasi variabel, dan mendefinisikan bagian dari program di mana variabel tertentu dapat diakses. Saat ini, ada tiga cara untuk mendeklarasikan variabel dalam JavaScript. dengan menggunakan kata kunci 1 lama, dan dengan menggunakan kata kunci 2 dan 3 baru. Sebelum ES6, menggunakan kata kunci _1 adalah satu-satunya cara untuk mendeklarasikan variabel, tetapi sekarang kita dapat menggunakan 2 dan 3, yang memiliki aturan lebih ketat dan membuat kode lebih rentan kesalahan. Kami akan mengeksplorasi perbedaan antara ketiga kata kunci di bawah iniAturan pelingkupan bervariasi dari bahasa ke bahasa. JavaScript memiliki dua cakupan. global dan lokal. Cakupan lokal memiliki dua variasi. lingkup fungsi lama, dan lingkup blok baru diperkenalkan dengan ES6. Perlu dicatat bahwa ruang lingkup fungsi sebenarnya adalah jenis khusus dari ruang lingkup blok Lingkup GlobalDalam sebuah skrip, cakupan terluar adalah cakupan global. Setiap variabel yang dideklarasikan dalam lingkup ini menjadi variabel global dan dapat diakses dari mana saja di dalam program _Seperti yang ditunjukkan contoh sederhana ini, variabel 7 bersifat global. Ini didefinisikan dalam lingkup global, dan dapat diakses di seluruh programTapi meskipun kelihatannya berguna, penggunaan variabel global tidak disarankan dalam JavaScript. Ini, misalnya, karena mereka berpotensi ditimpa oleh skrip lain, atau dari tempat lain di program Anda Lingkup LokalVariabel apa pun yang dideklarasikan di dalam blok milik blok tersebut dan menjadi variabel lokal Fungsi dalam JavaScript mendefinisikan ruang lingkup untuk variabel yang dideklarasikan menggunakan 1, 2 dan 3. Variabel apa pun yang dideklarasikan dalam fungsi itu hanya dapat diakses dari fungsi itu dan fungsi bersarang apa punBlok kode ( 1, 2, dll. ) menentukan ruang lingkup hanya untuk variabel yang dideklarasikan dengan kata kunci 2 dan 3. Kata kunci 1 terbatas pada ruang lingkup fungsi, artinya ruang lingkup baru hanya dapat dibuat di dalam fungsiKata kunci 2 dan 3 memiliki cakupan blok, yang membuat cakupan lokal baru untuk setiap blok yang dideklarasikan. Anda juga dapat menentukan blok kode mandiri dalam JavaScript, dan mereka juga membatasi ruang lingkup
Cakupan fungsi dan blok dapat disarangkan. Dalam situasi seperti itu, dengan beberapa lingkup bersarang, sebuah variabel dapat diakses di dalam lingkupnya sendiri atau dari lingkup dalam. Tetapi di luar cakupannya, variabel tersebut tidak dapat diakses Contoh Sederhana untuk Membantu Memvisualisasikan LingkupUntuk memperjelas, mari gunakan metafora sederhana. Setiap negara di dunia kita memiliki perbatasan. Segala sesuatu di dalam perbatasan ini termasuk dalam ruang lingkup negara. Di setiap negara terdapat banyak kota, dan masing-masing memiliki ruang lingkup kotanya sendiri. Negara dan kota sama seperti fungsi atau blok JavaScript. Mereka memiliki cakupan lokal mereka. Hal yang sama berlaku untuk benua. Meskipun ukurannya sangat besar, mereka juga dapat didefinisikan sebagai lokal Di sisi lain, lautan dunia tidak dapat didefinisikan memiliki ruang lingkup lokal, karena mereka sebenarnya membungkus semua objek lokal — benua, negara, dan kota — dan dengan demikian, ruang lingkupnya didefinisikan sebagai global. Mari kita visualisasikan ini pada contoh berikutnya
Lihat Pena Di sini, variabel _8 tersedia dari fungsi 9, seperti yang didefinisikan dalam lingkup luar fungsi 0. Jika kita menukar variabel 8 dan pernyataan konsol, kita akan mendapatkan 2, karena kita tidak dapat menjangkau lingkup dalam dari lingkup luarSekarang setelah kita memahami apa itu cakupan lokal dan global, dan bagaimana cakupan dibuat, saatnya untuk mempelajari bagaimana juru bahasa JavaScript menggunakannya untuk menemukan variabel tertentu. Kembali ke metafora yang diberikan, katakanlah saya ingin mencari teman saya yang bernama Monique. Saya tahu dia tinggal di Paris, jadi saya mulai mencari dari sana. Ketika saya tidak dapat menemukannya di Paris, saya naik satu tingkat dan memperluas pencarian saya di seluruh Prancis. Tapi sekali lagi, dia tidak ada di sana. Selanjutnya, saya memperluas pencarian saya lagi dengan naik level lagi. Akhirnya, saya menemukannya di Italia, yang dalam kasus kami adalah lingkup lokal Eropa Pada contoh sebelumnya, teman saya Monique diwakili oleh variabel 8. Di baris terakhir kita memanggil fungsi _4, yang memanggil 5, dan akhirnya ketika fungsi 6 dipanggil, pencarian dimulai. Penerjemah JavaScript bekerja dari lingkup yang sedang dijalankan dan bekerja sampai menemukan variabel yang dimaksud. Jika variabel tidak ditemukan dalam ruang lingkup apa pun, pengecualian akan dilemparkanJenis pencarian ini disebut. Struktur statis suatu program menentukan ruang lingkup variabel. Lingkup variabel ditentukan oleh lokasinya di dalam kode sumber, dan fungsi bersarang memiliki akses ke variabel yang dideklarasikan dalam lingkup luarnya. Tidak peduli dari mana suatu fungsi dipanggil, atau bahkan bagaimana itu dipanggil, cakupan leksikalnya hanya bergantung pada tempat fungsi itu dideklarasikan Sekarang mari kita lihat bagaimana cakupan blok baru bekerja
Lihat Pena Dalam contoh ini, kita dapat melihat bahwa variabel 7 dan 7 yang dideklarasikan dengan 3 dan 2 tidak dapat diakses di luar blok 1Sekarang mari kita ganti _3 dan 2 dengan 1 dan lihat apa yang terjadi
Lihat Pena Seperti yang Anda lihat, saat kita menggunakan kata kunci 1, variabel dapat dijangkau di seluruh cakupan fungsiDalam JavaScript, variabel dengan nama yang sama dapat ditentukan di beberapa lapisan lingkup bersarang. Dalam situasi seperti itu, variabel lokal mendapat prioritas di atas variabel global. Jika Anda mendeklarasikan variabel lokal dan variabel global dengan nama yang sama, variabel lokal akan diutamakan saat Anda menggunakannya di dalam fungsi atau blok. Jenis perilaku ini disebut membayangi. Sederhananya, variabel dalam membayangi luar Itulah mekanisme persis yang digunakan saat juru bahasa JavaScript mencoba menemukan variabel tertentu. Ini dimulai pada lingkup terdalam yang dieksekusi pada saat itu, dan berlanjut hingga kecocokan pertama ditemukan, tidak peduli apakah ada variabel lain dengan nama yang sama di tingkat luar atau tidak. Mari kita lihat contohnya
Lihat Pena Bahkan dengan nama yang sama, variabel lokal tidak menimpa variabel global setelah eksekusi fungsi 6. Tapi ini tidak selalu terjadi. Mari pertimbangkan ini
Lihat Pena Kali ini, variabel lokal _7 menimpa variabel global dengan nama yang sama. Saat kami menjalankan kode di dalam fungsi 6, variabel global dipindahkan. Jika variabel lokal ditugaskan tanpa terlebih dahulu dideklarasikan dengan kata kunci 1, itu menjadi variabel global. Untuk menghindari perilaku yang tidak diinginkan tersebut, Anda harus selalu mendeklarasikan variabel lokal sebelum menggunakannya. Variabel apa pun yang dideklarasikan dengan kata kunci _1 di dalam suatu fungsi adalah variabel lokal. Ini dianggap praktik terbaik untuk mendeklarasikan variabel AndaCatatan. dalam mode ketat, merupakan kesalahan jika Anda menetapkan nilai ke variabel tanpa terlebih dahulu mendeklarasikan variabel MengangkatPenerjemah JavaScript melakukan banyak operasi di belakang layar, dan salah satunya adalah "mengangkat". Jika Anda tidak mengetahui perilaku "tersembunyi" ini, ini dapat menyebabkan banyak kebingungan. Cara berpikir terbaik tentang perilaku variabel JavaScript adalah selalu memvisualisasikannya terdiri dari dua bagian. deklarasi dan inisialisasi/penugasan
Dalam kode di atas, pertama-tama kita mendeklarasikan variabel 1, dan kemudian kita menetapkan nilai 2 ke dalamnya. Dan di baris kode terakhir, kita melihat bahwa kedua langkah ini dapat digabungkan. Namun yang perlu Anda ingat adalah, meskipun tampak seperti satu pernyataan, dalam praktiknya mesin JavaScript memperlakukan pernyataan tunggal tersebut sebagai dua pernyataan terpisah, seperti pada dua baris pertama contoh.Kita sudah tahu bahwa setiap variabel yang dideklarasikan dalam suatu ruang lingkup termasuk dalam ruang lingkup itu. Namun yang belum kita ketahui adalah, di mana pun variabel dideklarasikan dalam cakupan tertentu, semua deklarasi variabel dipindahkan ke bagian atas cakupannya (global atau lokal). Ini disebut mengangkat, karena deklarasi variabel diangkat ke atas ruang lingkup. Perhatikan bahwa mengangkat hanya memindahkan deklarasi. Tugas apa pun dibiarkan pada tempatnya. Mari kita lihat contohnya
Lihat Pena Seperti yang Anda lihat, saat kita mencatat nilai 1, hasilnya adalah 4, karena kita mereferensikannya sebelum penugasan sebenarnya. Anda mungkin mengharapkan _5 untuk dilempar, karena 1 belum diumumkan. Tetapi yang tidak Anda ketahui adalah bahwa variabel tersebut dideklarasikan dan diinisialisasi dengan nilai default 4 di belakang layar. Begini cara kode ditafsirkan oleh mesin JavaScript
Penting untuk dicatat bahwa variabel tidak dipindahkan secara fisik. Mengangkat hanyalah model yang menjelaskan apa yang dilakukan mesin JS di belakang layar Sekarang, mari kita lihat cara mengangkat bekerja dengan 2 variabel _0Lihat Pena Dalam contoh ini, output konsol bukan ________42______4, tetapi kesalahan referensi dilemparkan. Mengapa? . Mereka sepenuhnya diinisialisasi hanya jika mereka benar-benar dideklarasikan dalam kode. Jadi, deklarasi variabel _2 diangkat tetapi tidak diinisialisasi dengan nilai 4, yang merupakan kasus dengan variabel 1. Bagian dari awal blok hingga deklarasi variabel sebenarnya disebut Zona Mati Temporal. Ini adalah mekanisme yang memastikan praktik pengkodean yang lebih baik, memaksa Anda untuk mendeklarasikan variabel sebelum menggunakannya. Jika kami memindahkan pernyataan konsol dari TDZ, kami akan mendapatkan keluaran yang diharapkan. 5 _1Lihat Pena Variabel yang dideklarasikan dengan kata kunci _3 memiliki perilaku yang sama dengan variabel 2FungsiMengangkat juga memengaruhi deklarasi fungsi. Namun sebelum kita melihat beberapa contoh, mari kita pelajari dulu perbedaan antara deklarasi fungsi dan ekspresi fungsi _2Cara termudah untuk membedakan deklarasi fungsi dari ekspresi fungsi adalah dengan memeriksa posisi kata 8 dalam pernyataan tersebut. Jika _8 adalah hal pertama dalam pernyataan, maka itu adalah deklarasi fungsi. Jika tidak, itu adalah ekspresi fungsiDeklarasi fungsi diangkat sepenuhnya. Ini berarti seluruh badan fungsi dipindahkan ke atas. Ini memungkinkan Anda untuk memanggil fungsi sebelum dideklarasikan _3Lihat Pena Alasan kode sebelumnya berfungsi adalah karena mesin JavaScript memindahkan deklarasi fungsi 0, dan semua kontennya, ke awal ruang lingkup. Kode ditafsirkan seperti ini _4Seperti yang mungkin Anda perhatikan, hanya deklarasi fungsi yang diangkat, tetapi ekspresi fungsinya tidak. Ketika suatu fungsi ditugaskan ke variabel, aturannya sama dengan untuk mengangkat variabel (hanya deklarasi yang dipindahkan, sedangkan penugasan dibiarkan di tempatnya) Pada kode di atas, kita melihat bahwa deklarasi fungsi lebih diutamakan daripada deklarasi variabel. Dan dalam contoh berikutnya, kita akan melihat bahwa ketika kita memiliki deklarasi fungsi versus penugasan variabel, yang terakhir diprioritaskan _5Lihat Pena Kali ini, kami memanggil fungsi _0 di baris terakhir kode, yang mengubah situasi. Sekarang kita mendapatkan output 2. Begini tampilannya saat ditafsirkan oleh mesin JavaScript _6Catatan. fungsi panah bekerja secara identik dengan ekspresi fungsi KelasDeklarasi kelas juga diangkat dengan cara yang sama seperti variabel yang dideklarasikan dengan pernyataan 2 _7Lihat Pena Dalam contoh ini, kita dapat melihat bahwa menggunakan kelas 4 sebelum deklarasi menghasilkan kesalahan referensi yang mirip dengan yang ada di variabel 2. Untuk memperbaikinya, kita harus menggunakan kelas 4 setelah deklarasi _8Lihat Pena Kelas juga dapat dibuat menggunakan ekspresi kelas, dengan menggunakan 1, 2 atau 3 pernyataan deklarasi variabel _9Lihat Pena Dalam contoh ini, kita dapat melihat bahwa kelas 4 diangkat sebagai ekspresi fungsi, tetapi tidak dapat digunakan karena nilainya adalah 4. Sekali lagi, untuk memperbaikinya kita harus menggunakan kelas 4 setelah deklarasi 0Lihat Pena Hal-hal untuk diingat
Bagikan Artikel IniIvaylo Gerchev Saya seorang pengembang/perancang web dari Bulgaria. Teknologi web favorit saya termasuk SVG, HTML, CSS, Tailwind, JavaScript, Node, Vue, dan React. Saat saya tidak memprogram Web, saya suka memprogram realitas saya sendiri ;) Bagaimana cara membuat variabel dapat diakses di luar fungsi dalam JavaScript?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 saya mengakses variabel var di luar fungsi JavaScript?Variabel yang dideklarasikan di dalam fungsi apa pun dengan kata kunci var disebut variabel lokal. Variabel lokal tidak dapat diakses atau dimodifikasi di luar deklarasi fungsi .
Bagaimana Anda mengakses variabel dalam fungsi di luar fungsi?Menggunakan kata kunci "global", Anda dapat mengubah cakupan variabel dari lokal ke global, lalu Anda dapat mengaksesnya di luar fungsi . e. g. Kode berikut akan mencetak v =25 meskipun pernyataan cetak berada di luar fungsi. |