اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر

الlet يكون مجاله بداخل القوسين الذي عرف بداخلهم , بينما الvar يكون مجاله ضمن الدالة التي عرف بها, لنفهم هذا الأمر سنكتب الكود التالي كمثال:

function print() {
  var firtname = "sharaf";
  let lastname = "ashraf";

  console.log(firtname, lastname); // sharaf ashraf

  {
    var fname = "sharaf1"
    let lname = "ashraf1";
    console.log(fname, lname); // sharaf1 ashraf1
  }

  console.log(fname); // sharaf1
  console.log(lname); // ReferenceError
}

run();

نﻻحظ ان كلا من المتغيرين fname, lname تم تعريفهم في نفس المجال, لكن على الرغم من ذلك عند طباعتنا لهم خارج الأقواس, يتم طباعة المتغير fname لأنه من النوع var ولكن يحدث خطأ عند محاولة طباعة lname لأنه من النوع let

كما بالإضافة إلى أن عند تعريف المتغير من النوع var يتم إعطائه قيمة إبتدائية ب"غير معرف" حتى قبل إنشائه, بينما المتغير let إن حاولنا الوصول إليه قبل تعريف لا يأتينا قيمة "غير معرف" إنما يأتينا خطأ من النوع ReferenceError

  • 1
نشر (معدل)
بتاريخ 24 دقائق مضت قال شرف الدين2:

الlet يكون مجاله بداخل القوسين الذي عرف بداخلهم , بينما الvar يكون مجاله ضمن الدالة التي عرف بها, لنفهم هذا الأمر سنكتب الكود التالي كمثال:


function print() {
  var firtname = "sharaf";
  let lastname = "ashraf";

  console.log(firtname, lastname); // sharaf ashraf

  {
    var fname = "sharaf1"
    let lname = "ashraf1";
    console.log(fname, lname); // sharaf1 ashraf1
  }

  console.log(fname); // sharaf1
  console.log(lname); // ReferenceError
}

run();

ﻻحظ أن كلا من المتغيرين fname, lname تم تعريفهم في نفس المجال, لكن على الرغم من ذلك عند طباعتنا لهم خارج الأقواس, يتم طباعة المتغير fname لأنه من النوع var ولكن يحدث خطأ عند محاولة طباعة lname لأنه من النوع let

كما بالإضافة إلى أن عند تعريف المتغير من النوع var يتم إعطائه قيمة إبتدائية ب"غير معرف" حتى قبل إنشائه, بينما المتغير let إن حاولنا الوصول إليه قبل تعريف لا يأتينا قيمة "غير معرف" إنما يأتينا خطأ من النوع ReferenceError

بالأضافة لما قاله شرف الدين

يمكنك إستخدام var لبناء property on the global object بينما لا تستطيع أن تستخدم let كما في المثال الأتي

var foo = "Foo";  // globally scoped
let bar = "Bar"; // globally scoped لن تسمح ب

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

و var تسمح لك بإعادة تعريف المتغير بينما let تعطي SyntaxError في  "strict mode" كما في المثال الأتي

'use strict';
var foo = "foo1";
var foo = "foo2"; // foo1 سوف تستبدل foo2 لا توجد مشكلة 

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared

 

تم التعديل في بواسطة Ziyad Hasan
  • 0
نشر (معدل)

يتم استخدام كل من var و let للإعلان عن المتغير في جافا سكريبت ولكن الاختلاف بينهما هو أن var عبارة عن دالة ذات نطاق مفتوح و let يتم تحديد نطاقها. يمكن القول أن المتغير الذي تم التصريح به باستخدام var يتم تعريفه في جميع أنحاء البرنامج مقارنةً بـ let. مثال سيوضح الفرق بشكل أفضل: مثال عن let:

Input:
console.log(x);
let x=5;
console.log(x);
Output:
Error

مثال عن var:

Input:
console.log(x);
var x=5;
console.log(x);
Output:
undefined
5

المتغيرات let لها مناطق ميتة مؤقتة بينما المتغيرات var ليست كذلك. لفهم المنطقة الميتة الزمنية ، دعنا نفحص دورات حياة كل من متغيري var و let ، والتي لها خطوتان: الإنشاء والتنفيذ. أولاً var: في مرحلة الإنشاء ، يقوم محرك JavaScript بتعيين مساحات تخزين لمتغيرات مختلفة ويقوم على الفور بتهيئتها إلى غير محددة. وفي مرحلة التنفيذ ، يخصص محرك JavaScript للمتغيرات var القيم المحددة بواسطة التخصيصات إذا كانت موجودة. خلاف ذلك ، تظل المتغيرات var غير محددة.  أما let ففي مرحلة الإنشاء ، يقوم محرك JavaScript بتعيين مساحات تخزين لمتغيرات let ولكن لا يقوم بتهيئة المتغيرات. ستؤدي الإشارة إلى المتغيرات غير المهيأة إلى حدوث خطأ في ReferenceError.
المتغيرات let لها نفس مرحلة التنفيذ مثل المتغيرات var.
تبدأ المنطقة الميتة الزمنية The temporal dead zoneمن الكتلة حتى تتم معالجة إعلان المتغير Let . بمعنى آخر ، إنه يكون ذلك الموقع حيث لا يمكنك الوصول إلى متغيرات let قبل تحديدها.

تم التعديل في بواسطة Ali Haidar Ahmad

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...