Abschlüsse in JavaScript sind eine wichtige und leistungsstarke Funktion, die dabei hilft, die verschiedenen Funktionalitäten und Muster der Programmiersprache JavaScript zu verstehen. Um Abschlüsse im Detail zu diskutieren, ist es notwendig, die Konzepte des Geltungsbereichs und der lexikalischen Umgebung (wo die Funktion deklariert wird) zu kennen.
- Sie werden unten besprochen:-
1. Scope: – Scope ist ein bestimmtes Feld oder eine bestimmte Umgebung, in der auf eine Variable, Funktion oder ein Objekt zugegriffen werden kann. Es gibt zwei Haupttypen von Bereichen in JavaScript:
-
Globaler Bereich: Dies ist der Standardbereich, in dem im gesamten Skript auf eine Variable oder Funktion zugegriffen werden kann.
var myGlobalVar = "This is global!";
function printSomething() {
console.log(myGlobalVar);
}
printSomething(); // Output: This is global!
-
Lokaler/Funktionsbereich: Wird verwendet, um auf Variablen oder Funktionen innerhalb einer bestimmten Funktion oder eines bestimmten Blocks zuzugreifen.
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
? Abschlüsse beziehen sich im Wesentlichen auf den Lokalen/Funktionsumfang. Lokaler/Funktionsbereich gibt den Zugriff auf Variablen innerhalb einer Funktion an, während sich globaler Bereich auf den Zugriff auf Variablen im gesamten Skript bezieht.
2. Lexikalische Umgebung:- Die lexikalische Umgebung ist ein Objekt, das alle Variablen und Funktionsreferenzen des aktuellen Ausführungskontexts enthält. Jede Funktion erstellt während der Ausführung ihre eigene lexikalische Umgebung.
Wie funktionieren Schließungen?
Wenn eine Funktion definiert ist, erstellt diese Funktion einen Abschluss. Dieser Abschluss enthält den Code der Funktion und der Variablen oder Funktionen innerhalb des lexikalischen Geltungsbereichs dieser Funktion. Wenn die Funktion aufgerufen wird, erstellt der Abschluss einen neuen Ausführungskontext und auf Variablen und Funktionen innerhalb dieses Kontexts kann zugegriffen werden.
- Lassen Sie uns nun anhand eines Beispiels erklären, wie Closing funktioniert:
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
Erklärung:
- এখানে 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
-
Function Currying:- একটি ফাংশন যে অন্য ফাংশনকে তার আর্গুমেন্ট হিসেবে গ্রহণ করে এবং একটি নতুন ফাংশন রিটার্ন করে, সেটি কারিং বলে।
function multiply(a) {
return function(b) {
return a * b;
};
}
const multiplyBy2 = multiply(2);
console.log(multiplyBy2(5)); // Output: 10
-
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 সেকেন্ড পরে)
Closures-এর সুবিধা:
-
ডেটা প্রাইভেসি: Closures sensitive ডেটা encapsulate করতে পারে এবং সেই ডেটা বাইরের জগতে অ্যাক্সেস থেকে নিরাপদ রাখে।
-
মেমরি ইফিশিয়েন্সি: একটি ফাংশন তার lexical scope ধরে রাখে, তাই closure যথাযথভাবে ব্যবহৃত হলে এটি মেমরি ইফিশিয়েন্ট হয়।
Closures-এর অসুবিধা:
-
মেমরি লিক: যদি Closures অনুপযুক্তভাবে ব্যবহৃত হয়, তাহলে এটি মেমরি লিকের কারণ হতে পারে, কারণ এটি প্রয়োজনের চেয়ে বেশি ডেটা ধরে রাখতে পারে।
-
ডিবাগিং সমস্যা: Closures জটিল হতে পারে এবং ডিবাগিং কঠিন হয়ে যায়, কারণ যখন আপনি বিভিন্ন ভেরিয়েবলের ভ্যালু ট্র্যাক করেন, তখন সেগুলি কোথায় সংরক্ষিত আছে তা স্পষ্ট নাও হতে পারে।
JavaScript-এ Closures একটি মৌলিক ও শক্তিশালী কনসেপ্ট যা আপনাকে অনেক উন্নত ও কার্যকরী কোড লিখতে সহায়তা করবে।
Das obige ist der detaillierte Inhalt vonAusführliche Diskussion über JavaScript-Verschlüsse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn