27
0

چه زمانی از var و چه زمانی از let باید استفاده کرد؟

0
پاسخ کاربردی

قوانین محدوده

تفاوت اصلی قوانین محدوده است. متغیرهایی که با کلمه‌کلیدی var تعریف می‌شن به بدنه‌ی تابع بلافصل محدود می‌شن (پس به این دلیل بهش می‌گن محدوده‌ی تابع)، در حالی که متغیرهای let به بلوک بلافصل محصور شده با { } محدود می‌شن (پس بهش می‌گن محدوده‌ی بلوک).

function run() {
  var foo = "Foo";
  let bar = "Bar";

  console.log(foo, bar); // Foo Bar

  {
    var moo = "Mooo"
    let baz = "Bazz";
    console.log(moo, baz); // Mooo Bazz
  }

  console.log(moo); // Mooo
  console.log(baz); // ReferenceError
}

run();

دلیل معرفی کلمه‌کلیدی let به زبان این بود که محدوده‌ی تابع گیج‌کننده بود و یکی از منابع اصلی باگ‌ها در جاوا اسکریپت بود.

Hoisting

متغیرهایی که با کلمه‌کلیدی var تعریف می‌شن، به بالا کشیده می‌شن و مقداردهی اولیه می‌شن، یعنی حتی قبل از اینکه تعریف بشن، در محدوده‌ی خود قابل دسترسی هستن و مقدارشون undefined هست.

function checkHoisting() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();

ایجاد ویژگی شیء گلوبال

let ویژگی روی شی گلوبال ایجاد نمیکنه. اما var اینکارو انجام میده

var foo = "Foo"; 
let bar = "Bar"; 

console.log(window.foo); // Foo
console.log(window.bar); // undefined

تعریف مجدد

در حالت strict mode شما میتونی دو یا چند متغیر هم نام با var بسازی اما let به شما این اجازه رو نمیده

'use strict';
var foo = "foo1";
var foo = "foo2"; // Moshkeli vojood nadare va foo2 replace mishe ba foo1

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError
ارسال پاسخ به سوال بالا

برای ارسال پاسخ باید وارد اکانتت بشی

اگر پاسخت شامل تکه کدی میشه، از منوی ویرایشگر پایین، تکه کدی که نوشتی رو انتخاب کن و بعد از طریق زبان کدی که نوشتی رو انتخاب کن تا کدت داخل بلاک مخصوص زبان خودش قرار بگیره و کدت خواناتر برای بقیه نشون داده بشه

اگه پاسخت رفرنسی داره، لینک رفرنس رو هم بذار تا پاسختت کاملتر و معتبر تر بشه