জাভাস্ক্রিপ্ট — var, let, const
Tags: var, let, const, es6
Published: 2020-09-14 10:12:54

---
title: জাভাস্ক্রিপ্ট — var, let, const
published: true
description: 
tags: var, let, const, es6
cover_image: https://miro.medium.com/max/640/1*WBDnw5WVX6i-T1ziQeR1QQ.png
---

ES6 পড়ুন (এটি ECMAScript 2015 নামেও পরিচিত) জাভাস্ক্রিপ্টের সিনট্যাক্সের চেয়ে বড় পরিবর্তন হয়েছে এবং জেএসে নতুন বৈশিষ্ট্য নিয়ে আসছে যা এর আগে ছিল না…

ES6 জানা গুরুত্বপূর্ণ কারণ এর একটি কারণ হ’ল এটি জাভাস্ক্রিপ্টকে আরও ভাল লেখা এবং সহজ করে তোলে এবং একই সাথে আজকের আধুনিক ওয়েব প্রযুক্তির সাথে **রিঅ্যাক্ট(React)**, **নোড.জেস(Node.js)** এবং আরও অনেকগুলি ব্যবহার করা হচ্ছে ।

এই পোস্টে, আপনি নতুন কীওয়ার্ড শিখতে পারবেন যা ES6 ভ্যারিয়েবল ডিক্লারেশন্স জন্য নিয়ে আসছে: `let` এবং `const` । তবে প্রথমে, আসুন কী কী ভুল ছিল তা ব্যাখ্যা করি `var` ।

**var সমস্যা কি ছিল?**

**var** ভেরিয়েবল ঘোষণার জন্য আমাদের কাছে ইতিমধ্যে জেএসে কীওয়ার্ড ছিল । তাহলে কেন **ES6** অতিরিক্ত কীওয়ার্ড চালু করেছে?

সমস্যাটি বোঝার জন্য var প্রথমে আপনাকে বুঝতে হবে যে [Scope](https://www.w3schools.com/) কী।

> Scope determines the accessibility of variables, objects, and functions from different parts of the code. - w3schools

জাভাস্ক্রিপ্টে 3 ধরণের স্কোপ (Scope) রয়েছে:
* ফাংশন (লোকাল ) সুযোগ
* গ্লোবাল স্কোপ (Scope)
* ব্লক স্কোপ (Scope) (ইএস 6 সহ নতুন)

> var supports function & global scope, but not block scope.

**ফাংশন ( লোকাল ) স্কোপ**
যখন কোনও ফাংশনের অভ্যন্তরে কোনও ভেরিয়েবল সংজ্ঞায়িত করা হয় , এটি কেবলমাত্র সেই ফাংশনের জন্য লোকাল হবে এবং বাইরে ব্যবহার করা যাবে না:

```
function local() { 
  var number = 1; 
  console.log(number); // 1 gets printed 
} 
console.log(number); // undefined
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/uaokbx31ldnws6azr9y7.png)

**গ্লোবাল স্কোপ**
যখন কোনও ফাংশনের বাইরে কোনও ভেরিয়েবল ঘোষণা করা হয় বা var কীওয়ার্ড ছাড়াই তখন তা **গ্লোবাল** হয়ে যাবে এবং যে কোনও জায়গা থেকে অ্যাক্সেসযোগ্য হবে:

```
var number = 1; 
function local() { 
   console.log(number); // 1 gets printed 
} 
console.log(number); // 1 gets printed
```

**ব্লক স্কোপ**

> curly braces { }, if-else cases এবং for loops হয় block-scoped

**Example**

```
if(true){
   let letVariable = "This is let Variable";
}
console.log(letVariable)
```

**Output**
`Uncaught ReferenceError: letVariable is not defined`

**Working Now**
```
if(true){
   let letVariable = "This is let Variable";
   console.log(letVariable)
}

```
**Output**
`This is let Variable`

আসুন লুপের ভিতরে একটি ভেরিয়েবল (সহ var) সংজ্ঞায়িত করি এবং দেখুন কী প্রিন্ট হয়...

```
for(var i = 1; i < 10; i++) { 
   console.log(i); 
} 
console.log(i); // What do we expect here?
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ywb06hv1mc8zesz6q69x.png)

এখানে সবকিছু ঠিক আছে মনে হচ্ছে। তবে দ্বিতীয় কনসোল.লগের কী হবে?
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/gz6so2v1i95m3cemamzv.png)

দ্বিতীয় console.log বাইরে জন্য লুপ এবং লোকাল ভ্যারিয়েবল
“i” যেহেতু প্রিন্ট হওয়ার কথা ছিল undefined ।

তবে, যদি আমরা let or const, ব্যবহার করি, যেহেতু সেগুলি ব্লক-স্কোপড , এই সমস্যাটি সমাধান হবে।

**রেডিক্লারেশন ইসু অফ(redeclaration issue of) var**

এর সাথে আর একটি সমস্যা **var** হ'ল এটি একই পরিবর্তনশীলগুলিকে বারবার পুনরায় ডিক্লেয়ার করার অনুমতি দেয় :

```
var number = 1; // first declaration 
var number = 2; // same variable redeclared with the same name console.log(number); // And we see no errors
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/2eaxi8n7gsjnjoajepbb.png)

এখন আসুন দেখুন ES6 কীভাবে তাদের সাথে ডিল করে …

**var এর পরিবর্তে let**

আমি উপরে উল্লিখিত সমস্যাগুলি প্রতিরোধ করতে আসুন এর সাথে আবার চেষ্টা করুন let:

```
for(let i = 0; i < 10; i++) { // same local variable with let   console.log(i); 
} 
console.log(i); // This time what do we expect?
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/vmrt6t9lcr5dw4aycvra.png)

তাই let ব্লক-স্কোপ ও দ্বিতীয় console.log প্রিন্ট করছে undefined । পারফেক্ট!

এছাড়াও, একটি ভেরিয়েবলের সাথে একটি ভেরিয়েবল পুনরায় ঘোষণার চেষ্টা করে let একটি ত্রুটি প্রদান করে:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/2ellb6pfqraa2qaq6xd7.png)

সুতরাং let কীওয়ার্ড:

* let var এর পরিবর্তে ব্যবহার করা হয়(can be used instead of var)
* এটা block-scoped (is block-scoped)
* রেডিক্লারেশন অনুমতি দেই না( doesn’t allow redeclaration, but can be reassigned later) ।

**const**

অন্য নতুন কীওয়ার্ড যা ES6 এনেছে তা হ’ল const ।

**let** এবং এর মধ্যে পার্থক্য **const** হল একবার আমরা এর সাথে একটি ভেরিয়েবল ঘোষণা করি const, পরে এটি পরিবর্তন করা যায় না:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/d7hhp5k6c34y0qg7c1kv.png)

```
if(true){
   const constVariable = "This is const";
   constVariable = "This is const again";
   console.log(constVariable );
}
```
**Output**
`Uncaught TypeError: Assignment to constant variable`

**Another Example**

```
if(true){
   const constVariable = {
      name: "Javasript",
      age: "20 years"  
   };
   constVariable.name = "JS";
   console.log(constVariable );
}
```
**Output**
`{name: "JS", age: "20 years"}`