Les fermetures en JavaScript sont une fonctionnalité importante et puissante qui aide à comprendre les différentes fonctionnalités et modèles du langage de programmation JavaScript. Pour discuter des fermetures en détail, il est nécessaire de connaître les concepts de portée et d'environnement lexical (où la fonction est déclarée).
- Ils sont discutés ci-dessous :-
1. Portée : - La portée est un champ ou un environnement spécifique où une variable, une fonction ou un objet est accessible. Il existe deux principaux types de portées en JavaScript : -
-
Portée globale : Il s'agit de la portée par défaut dans laquelle une variable ou une fonction est accessible tout au long du script.
var myGlobalVar = "This is global!";
function printSomething() {
console.log(myGlobalVar);
}
printSomething(); // Output: This is global!
Copier après la connexion
-
Portée locale/fonction : Il est utilisé pour accéder à des variables ou des fonctions à l'intérieur d'une fonction ou d'un bloc spécifique.
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
Copier après la connexion
? Les Fermetures sont essentiellement liées à la Portée locale/fonctionnelle. Portée locale/fonction indique l'accessibilité des variables au sein d'une fonction, tandis que la portée globale fait référence à l'accès aux variables tout au long du script.
2. Environnement lexical :- L'environnement lexical est un objet qui contient toutes les variables et références de fonctions du contexte d'exécution actuel. Chaque fonction crée son propre environnement lexical lors de l'exécution.
Comment fonctionnent les fermetures ?
Lorsqu'une fonction est définie, cette fonction crée une fermeture. Cette fermeture contient le code de la fonction et les variables ou fonctions dans le cadre lexical de cette fonction. Lorsque la fonction est appelée, la fermeture crée un nouveau contexte d'exécution et les variables et fonctions dans ce contexte sont accessibles.
- Expliquons maintenant comment fonctionne Closure avec un exemple :
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
Copier après la connexion
Explication :
- এখানে 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
Copier après la connexion
-
Function Currying:- একটি ফাংশন যে অন্য ফাংশনকে তার আর্গুমেন্ট হিসেবে গ্রহণ করে এবং একটি নতুন ফাংশন রিটার্ন করে, সেটি কারিং বলে।
function multiply(a) {
return function(b) {
return a * b;
};
}
const multiplyBy2 = multiply(2);
console.log(multiplyBy2(5)); // Output: 10
Copier après la connexion
-
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 সেকেন্ড পরে)
Copier après la connexion
Closures-এর সুবিধা:
-
ডেটা প্রাইভেসি: Closures sensitive ডেটা encapsulate করতে পারে এবং সেই ডেটা বাইরের জগতে অ্যাক্সেস থেকে নিরাপদ রাখে।
-
মেমরি ইফিশিয়েন্সি: একটি ফাংশন তার lexical scope ধরে রাখে, তাই closure যথাযথভাবে ব্যবহৃত হলে এটি মেমরি ইফিশিয়েন্ট হয়।
Closures-এর অসুবিধা:
-
মেমরি লিক: যদি Closures অনুপযুক্তভাবে ব্যবহৃত হয়, তাহলে এটি মেমরি লিকের কারণ হতে পারে, কারণ এটি প্রয়োজনের চেয়ে বেশি ডেটা ধরে রাখতে পারে।
-
ডিবাগিং সমস্যা: Closures জটিল হতে পারে এবং ডিবাগিং কঠিন হয়ে যায়, কারণ যখন আপনি বিভিন্ন ভেরিয়েবলের ভ্যালু ট্র্যাক করেন, তখন সেগুলি কোথায় সংরক্ষিত আছে তা স্পষ্ট নাও হতে পারে।
JavaScript-এ Closures একটি মৌলিক ও শক্তিশালী কনসেপ্ট যা আপনাকে অনেক উন্নত ও কার্যকরী কোড লিখতে সহায়তা করবে।
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!