Memahami skop dan skop leksikal adalah asas untuk menulis kod JavaScript yang cekap dan bebas ralat. Konsep ini menentukan cara pembolehubah diakses dan tempat ia tersedia dalam kod anda.
Skop merujuk kepada konteks pelaksanaan semasa, yang menentukan keterlihatan dan kebolehcapaian pembolehubah. JavaScript mempunyai tiga jenis skop:
Contoh:
{ let a = 10; const b = 20; console.log(a, b); // Output: 10, 20 } console.log(a); // Error: a is not defined
Contoh:
function testFunctionScope() { if (true) { var x = 10; // Function-scoped } console.log(x); // Output: 10 } testFunctionScope();
Contoh:
var globalVar = "I am global"; console.log(globalVar); // Output: I am global
Skop leksikal bermaksud skop pembolehubah ditentukan oleh kedudukannya dalam kod sumber. Fungsi dilaksanakan menggunakan rantai skop yang ada semasa ia ditakrifkan, bukan apabila ia digunakan.
Rantai skop ialah hierarki skop yang digunakan oleh JavaScript untuk menyelesaikan rujukan pembolehubah. Jika pembolehubah tidak ditemui dalam skop semasa, pembolehubah itu kelihatan dalam skop luar, berterusan sehingga mencapai skop global.
Contoh:
function outer() { let outerVar = "I'm outer"; function inner() { console.log(outerVar); // Accesses the outer scope } inner(); } outer(); // Output: I'm outer
Fungsi dalaman mempunyai akses kepada pembolehubah dalam fungsi luarnya disebabkan skop leksikal.
Contoh:
function outerFunction() { let outerVariable = "Outer"; function innerFunction() { let innerVariable = "Inner"; console.log(outerVariable); // Outer console.log(innerVariable); // Inner } innerFunction(); } outerFunction();
function createMultiplier(multiplier) { return function (value) { return value * multiplier; // Accesses 'multiplier' from outer scope }; } const double = createMultiplier(2); console.log(double(5)); // Output: 10
Penutupan bergantung pada skop leksikal untuk mengingati pembolehubah dari persekitaran luarnya.
Contoh:
function outerFunction() { let count = 0; return function () { count++; console.log(count); }; } const counter = outerFunction(); counter(); // Output: 1 counter(); // Output: 2
Pembolehubah yang diisytiharkan tanpa let, const atau var menjadi pembolehubah global.
{ let a = 10; const b = 20; console.log(a, b); // Output: 10, 20 } console.log(a); // Error: a is not defined
Menggunakan var di dalam blok membawa kepada hasil yang tidak dijangka.
function testFunctionScope() { if (true) { var x = 10; // Function-scoped } console.log(x); // Output: 10 } testFunctionScope();
Pembolehubah yang diisytiharkan dalam skop bersarang boleh membayangi (mengatasi) pembolehubah dalam skop luar.
var globalVar = "I am global"; console.log(globalVar); // Output: I am global
Scope | Lexical Scope |
---|---|
Refers to the context in which variables are accessible. | Refers to how the location of variables in the code determines scope. |
Can be global, block, or function. | Depends on the structure of the code when it is written. |
Dynamic during runtime. | Fixed during code definition. |
function outer() { let outerVar = "I'm outer"; function inner() { console.log(outerVar); // Accesses the outer scope } inner(); } outer(); // Output: I'm outer
Menguasai konsep ini adalah penting untuk menyahpepijat dan menulis kod JavaScript yang berkesan.
Hai, saya Abhay Singh Kathayat!
Atas ialah kandungan terperinci Menguasai Skop dan Skop Leksikal dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!