ما الفرق بين let و var في JavaScript؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم JavaScript وواجهت موقفًا غير مفهوم بالنسبة لي. عندما أعلن عن متغيرات باستخدام `var` و `let`، يتصرف الكود بشكل مختلف، ولا أستطيع فهم السبب.
هذا مثال أربكني:
```javascript
function test() {
if (true) {
var x = 10;
let y = 20;
}
console.log(x); // 10
console.log(y); // ReferenceError: y is not defined
}
```
لماذا `x` متاح خارج كتلة `if`، بينما `y` ليس كذلك؟ اعتقدت أن كلا المتغيرين أُعلنا في نفس المكان.
مثال آخر مع الحلقة:
```javascript
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1000);
}
// يطبع: 3 3 3
for (let j = 0; j < 3; j++) {
setTimeout(() => console.log(j), 1000);
}
// يطبع: 0 1 2
```
لماذا يتصرف `var` في الحلقة بهذه الطريقة الغريبة؟ كنت أتوقع أن يطبع كلا الخيارين 0, 1, 2. ما الخطأ الذي أفعله؟ ما الفرق الجوهري بين هاتين الطريقتين لإعلان المتغيرات؟ سأكون ممتنًا لـ