تختلف في ثلاث طرق: scope، hoisting behavior، وreassignment.
js
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
تختلف في ثلاث طرق: scope، hoisting behavior، وreassignment.
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
var مجال الدالة (function-scoped)، معرّفة مسبقاً وتُهيأ إلى undefined، ويمكن إعادة تعريفها. هذا يسبب تسرباً مفاجئاً — تجنبها.let مجال الكتلة (block-scoped) ({ })، قابلة لإعادة التعيين، وتعيش في temporal dead zone حتى سطر التعريف (الوصول إليها مبكراً يرمي خطأ).const مجال الكتلة وغير قابلة لإعادة التعيين — لكن لاحظ أن الربط ثابت، وليس القيمة:const user = { name: "Ann" };
user.name = "Bob"; // ✅ allowed — mutating the object, not reassigning
user = {}; // ❌ TypeError — can't rebind `user`
ابدأ بـ const؛ انتقل إلى let فقط عند الحاجة لإعادة التعيين؛ لا تستخدم var أبداً في الكود الجديد. هذا يوضح النية ("هذا لن يتغير") ويتجنب تسرب الـ scope والارتباك في hoisting الذي يسببه var.