JavaScript Let

ECMAScript 2015

ES2015-এর মাধ্যমে দুটি গুরুত্বপূর্ণ JavaScript নতুন কীওয়ার্ড উপস্থাপিত হয়েছে:letconst.

এই দুটি কীওয়ার্ডটি JavaScript-এ ব্লক স্কোপকে প্রদান করেBlock Scope)বিন্যাসটি(এবং নিয়ামক)

ES2015-এর আগে, JavaScript-এ কেবল দুইটি ধরনের স্কোপ ছিল:全局作用域函数作用域.

全局作用域

সার্বজনীন(ফাংশনের বাইরে)ঘোষিত বিন্যাসটি মালিকানা করে全局作用域.

ইনস্ট্যান্স

var carName = "porsche";
// এখানের কোডটিও carName-এর ব্যবহার করা যায়
function myFunction() {
  // এখানের কোডটিও carName-এর ব্যবহার করা যায়
}

স্বয়ং প্রয়াস করুন

সার্বজনীনবিন্যাসটি JavaScript প্রোগ্রামের যে কোন স্থানে পরিবেশন করা যায়

函数作用域

স্থানীয়(ফাংশনের মধ্যে)ঘোষিত বিন্যাসটি মালিকানা করে函数作用域.

ইনস্ট্যান্স

// এখানের কোডটি carName-এর ব্যবহার করা যায় না
function myFunction() {
  var carName = "porsche";
  // code here CAN use carName
}
// এখানের কোডটি carName-এর ব্যবহার করা যায় না

স্বয়ং প্রয়াস করুন

স্থানীয়বিন্যাসটি শুধুমাত্র ঘোষিত হওয়া ফাংশনের মধ্যেই পরিবেশন করা যায়

JavaScript ব্লক স্কোপ

দ্বারা var কীওয়ার্ড ঘোষিত বিন্যাসটি ব্লক স্কোপকে নেইস্কোপ.

ব্লক {} ব্লকের মধ্যে ঘোষিত বিন্যাসটি ব্লকের বাইরেও পরিবেশন করা যায়

ইনস্ট্যান্স

{ 
  var x = 10; 
}
// এখানে x-এর ব্যবহার করা যায়

ES2015-এর আগে, JavaScript-এ ব্লক স্কোপ ছিল না

ব্যবহার করা যেতে পারে let কীওয়ার্ড ঘোষিত বিন্যাসটি ব্লক স্কোপের বিন্যাসটি মালিকানা করে

ব্লক {} ব্লকের মধ্যে ঘোষিত বিন্যাসটি ব্লকের বাইরে পরিবেশন করা যায় না:

ইনস্ট্যান্স

{ 
  let x = 10;
}
// এখানে x-এর ব্যবহার করা যায় না

পুনরায় ঘোষিত বিন্যাস

ব্যবহার করুন var কীওয়ার্ড পুনরায় ঘোষিত বিন্যাসটি সমস্যা সৃষ্টি করতে পারে

ব্লকের মধ্যে পুনরায় ঘোষিত বিন্যাসটি ব্লকের বাইরের বিন্যাসটিকেও পুনরায় ঘোষিত করবে:

ইনস্ট্যান্স

var x = 10;
// এখানে x 10
{ 
  var x = 6;
  // এখানে x 6
}
// এখানে x 6

স্বয়ং প্রয়াস করুন

ব্যবহার করুন let কীওয়ার্ড পুনরায় ঘোষিত বিন্যাসটি এই সমস্যা সমাধান করতে পারে

ব্লকের মধ্যে পুনরায় ঘোষিত বিন্যাসটি ব্লকের বাইরের বিন্যাসটিকে পুনরায় ঘোষিত করে না:

ইনস্ট্যান্স

var x = 10;
// এখানে x 10
{ 
  let x = 6;
  // এখানে x 6
}
// এখানে x 10

স্বয়ং প্রয়াস করুন

ব্রাউজার সমর্থন

Internet Explorer 11 বা তার আগের সংস্করণগুলি সম্পূর্ণভাবে সমর্থন করে না let কীওয়ার্ড

এই টেবিলটি প্রথমবারের মতো সম্পূর্ণরূপে সমর্থন করে let কীওয়ার্ডের ব্রাউজার সংস্করণ:

Chrome 49 আইই / এজ ১২ ফায়ারফক্স ৪৪ স্যাফারি ১১ অপেরা ৩৬
2016 সাল ৩ মাস 2015 সাল ৭ মাস 2015 সাল ১ মাস 2017 সাল ৯ মাস 2016 সাল ৩ মাস

循环作用域

在循环中使用 var

ইনস্ট্যান্স

var i = 7;
for (var i = 0; i < 10; i++) {
  // 一些语句
}
// 此处,i 为 10

স্বয়ং প্রয়াস করুন

在循环中使用 let

ইনস্ট্যান্স

let i = 7;
for (let i = 0; i < 10; i++) {
  // 一些语句
}
// 此处 i 为 7

স্বয়ং প্রয়াস করুন

在第一个例子中,在循环中使用的变量使用 var 重新声明了循环之外的变量。

在第二个例子中,在循环中使用的变量使用 let 并没有重新声明循环外的变量。

如果在循环中用 let 声明了变量 i,那么只有在循环内,变量 i 才是可见的。

函数作用域

在函数内声明变量时,使用 varlet 很相似。

它们都有函数作用域

function myFunction() {
  var carName = "porsche";   // 函数作用域
}
function myFunction() {
  let carName = "porsche";   // 函数作用域
}

全局作用域

如果在块外声明声明,那么 varlet 也很相似。

它们都拥有全局作用域

var x = 10;       // 全局作用域
let y = 6;       // 全局作用域

HTML 中的全局变量

使用 JavaScript 的情况下,全局作用域是 JavaScript 环境。

在 HTML 中,全局作用域是 window 对象。

দ্বারা var 关键词定义的全局变量属于 window 对象:

ইনস্ট্যান্স

var carName = "porsche";
// 此处的代码可使用 window.carName

স্বয়ং প্রয়াস করুন

দ্বারা let 关键词定义的全局变量不属于 window 对象:

ইনস্ট্যান্স

let carName = "porsche";
// 此处的代码不可使用 window.carName

স্বয়ং প্রয়াস করুন

重新声明

允许在程序的任何位置使用 var 重新声明 JavaScript 变量:

ইনস্ট্যান্স

var x = 10;
// 现在,x 为 10
var x = 6;
// 现在,x 为 6

স্বয়ং প্রয়াস করুন

একই অবস্থানে, বা একই ব্লকে, দ্বারা let পুনরায় প্রকাশ করা var ভেরিয়েবলটি অনুমতি নয়:

ইনস্ট্যান্স

var x = 10;       // অনুমত
let x = 6;       // নিষিদ্ধ
{
  var x = 10;   // অনুমত
  let x = 6;   // নিষিদ্ধ
}

একই অবস্থানে, বা একই ব্লকে, দ্বারা let পুনরায় প্রকাশ করা let ভেরিয়েবলটি অনুমতি নয়:

ইনস্ট্যান্স

let x = 10;       // অনুমতি
let x = 6;       // নিষিদ্ধ
{
  let x = 10;   // অনুমতি
  let x = 6;   // নিষিদ্ধ
}

একই অবস্থানে, বা একই ব্লকে, দ্বারা var পুনরায় প্রকাশ করা let ভেরিয়েবলটি অনুমতি নয়:

ইনস্ট্যান্স

let x = 10;       // অনুমতি
var x = 6;       // অনুমতি নয়
{
  let x = 10;   // অনুমতি
  var x = 6;   // অনুমতি নয়
}

ভিন্ন অবস্থান বা ব্লকের মধ্যে, দ্বারা let ভেরিয়েবল পুনরায় প্রকাশ করা অনুমতি পায়:

ইনস্ট্যান্স

let x = 6;       // অনুমতি
{
  let x = 7;   // অনুমতি
}
{
  let x = 8;   // অনুমতি
}

স্বয়ং প্রয়াস করুন

উন্নীত

দ্বারা var প্রকাশিত ভেরিয়েবলটিউন্নীতউন্নীত (Hoisting) কি না বুঝেন, আমাদের Hoisting চপ্তকে পড়ুন。

ভেরিয়েবল প্রকাশ পর্যন্ত ব্যবহার করতে পারেন:

ইনস্ট্যান্স

// এখানে, আপনি carName ব্যবহার করতে পারবেন
var carName;

স্বয়ং প্রয়াস করুন

দ্বারা let প্রকাশিত ভেরিয়েবলটি শীর্ষে উন্নীত হবে না。

প্রকাশ let ভেরিয়েবল পূর্বে ব্যবহার করা হলে ReferenceError হবে。

ভেরিয়েবল ব্লকের শুরু থেকে 'অস্থায়ী মৃত্যু' অবস্থায় থাকে, প্রকাশ পর্যন্ত:

ইনস্ট্যান্স

// এখানে, আপনি carName ব্যবহার করতে পারবেন না
let carName;