Penutupan dalam JavaScript ialah ciri penting dan berkuasa yang membantu memahami pelbagai fungsi dan corak bahasa pengaturcaraan JavaScript. Untuk membincangkan penutupan secara terperinci, adalah perlu untuk mengetahui tentang konsep skop dan persekitaran leksikal (di mana fungsi diisytiharkan).
- Mereka dibincangkan di bawah:-
1. Skop:- Skop ialah medan atau persekitaran khusus di mana pembolehubah, fungsi atau objek boleh diakses. Terdapat dua jenis skop utama dalam JavaScript:-
-
Skop Global: Ini ialah skop lalai di mana pembolehubah atau fungsi boleh diakses sepanjang skrip.
var myGlobalVar = "This is global!";
function printSomething() {
console.log(myGlobalVar);
}
printSomething(); // Output: This is global!
Salin selepas log masuk
-
Skop Tempatan/Fungsi: Ia digunakan untuk mengakses pembolehubah atau fungsi di dalam fungsi atau blok tertentu.
function printSomething() {
var myLocalVar = "I'm local!";
console.log(myLocalVar);
}
printSomething(); // Output: I'm local!
// Not allowed
console.log(myLocalVar); // Output: Uncaught ReferenceError: myLocalVar is not defined
Salin selepas log masuk
? Penutupan pada asasnya berkaitan dengan Skop Tempatan/Fungsi. Skop Tempatan/Fungsi menunjukkan kebolehcapaian pembolehubah dalam fungsi, manakala skop global merujuk kepada capaian pembolehubah sepanjang keseluruhan skrip.
2. Persekitaran Leksikal:- Persekitaran Leksikal ialah objek yang mengandungi semua pembolehubah dan rujukan fungsi konteks pelaksanaan semasa. Setiap fungsi mencipta persekitaran leksikalnya sendiri semasa pelaksanaan.
Bagaimanakah Penutupan berfungsi?
Apabila fungsi ditakrifkan, fungsi itu mencipta penutupan. Penutupan ini mengandungi kod fungsi dan pembolehubah atau fungsi dalam skop leksikal fungsi itu. Apabila fungsi dipanggil, penutupan mencipta konteks pelaksanaan baharu dan pembolehubah serta fungsi dalam konteks itu boleh diakses.
- Sekarang mari kita terangkan cara Penutupan berfungsi dengan contoh:
function outerFunction() {
let outerVariable = 'I am from outer function';
function innerFunction() {
console.log(outerVariable); // এখানে outerVariable-কে access করছে
}
return innerFunction;
}
const closureFunc = outerFunction();
closureFunc(); // Output: I am from outer function
Salin selepas log masuk
Penjelasan:
- এখানে outerFunction একটি ভেরিয়েবল outerVariable ডিক্লেয়ার করেছে এবং একটি innerFunction রিটার্ন করছে।
-
innerFunctionএর মধ্যে outerVariableকে এক্সেস করা হচ্ছে, যদিও innerFunction নিজে কোনো outerVariable ডিক্লেয়ার করে নাই।
- যখন closureFunc চালানো হয়, তখন outerVariable প্রিন্ট হবে, যদিও outerFunction ইতিমধ্যে execute হয়ে শেষ হয়ে গেছে। এটি সম্ভব হয়েছে closure-এর কারণে, যা outerFunctionএর lexical environment ধরে রেখেছে।
Closures-এর ব্যবহার:
-
Data Privacy/Encapsulation:- Closures প্রাইভেট ডেটা তৈরি করতে পারে যা শুধুমাত্র নির্দিষ্ট ফাংশনের মাধ্যমে অ্যাক্সেস করা যায়।
function counter() {
let count = 0;
return function() {
count++;
return count;
};
}
const myCounter = counter();
console.log(myCounter()); // Output: 1
console.log(myCounter()); // Output: 2
console.log(myCounter()); // Output: 3
Salin selepas log masuk
-
Function Currying:- একটি ফাংশন যে অন্য ফাংশনকে তার আর্গুমেন্ট হিসেবে গ্রহণ করে এবং একটি নতুন ফাংশন রিটার্ন করে, সেটি কারিং বলে।
function multiply(a) {
return function(b) {
return a * b;
};
}
const multiplyBy2 = multiply(2);
console.log(multiplyBy2(5)); // Output: 10
Salin selepas log masuk
-
Asynchronous Handling Operations:- Closures প্রায়ই asynchronous callback ফাংশনের ক্ষেত্রে ব্যবহৃত হয়, যেমন setTimeout বা event listeners.
function asyncFunction() {
let message = 'Hello, World!';
setTimeout(function() {
console.log(message);
}, 1000);
}
asyncFunction(); // Output: Hello, World! (1 সেকেন্ড পরে)
Salin selepas log masuk
Closures-এর সুবিধা:
-
ডেটা প্রাইভেসি: Closures sensitive ডেটা encapsulate করতে পারে এবং সেই ডেটা বাইরের জগতে অ্যাক্সেস থেকে নিরাপদ রাখে।
-
মেমরি ইফিশিয়েন্সি: একটি ফাংশন তার lexical scope ধরে রাখে, তাই closure যথাযথভাবে ব্যবহৃত হলে এটি মেমরি ইফিশিয়েন্ট হয়।
Closures-এর অসুবিধা:
-
মেমরি লিক: যদি Closures অনুপযুক্তভাবে ব্যবহৃত হয়, তাহলে এটি মেমরি লিকের কারণ হতে পারে, কারণ এটি প্রয়োজনের চেয়ে বেশি ডেটা ধরে রাখতে পারে।
-
ডিবাগিং সমস্যা: Closures জটিল হতে পারে এবং ডিবাগিং কঠিন হয়ে যায়, কারণ যখন আপনি বিভিন্ন ভেরিয়েবলের ভ্যালু ট্র্যাক করেন, তখন সেগুলি কোথায় সংরক্ষিত আছে তা স্পষ্ট নাও হতে পারে।
JavaScript-এ Closures একটি মৌলিক ও শক্তিশালী কনসেপ্ট যা আপনাকে অনেক উন্নত ও কার্যকরী কোড লিখতে সহায়তা করবে।
Atas ialah kandungan terperinci Perbincangan terperinci tentang Penutupan JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!