קח את הקוד הבא. הוא רץ. לא זורק שגיאה. ומחזיר תוצאה שתפתיע את רוב המתחילים:
javascript
var x = 1;
if (true) {
var x = 2;
}
console.log(x); // 2 - אותו x!שני ה-var x הם אותו variable. ה-if לא יצר scope חדש. זה לא bug ב-JavaScript, זה איך var תוכנן ב-1995. הקוד הזה לא תיאורטי, הוא הסוג של baga שתבלה שעות לחפש ב-production. ES6 הוסיפה את let ו-const בדיוק כדי לפתור את זה.
primitives ב-JavaScript - וכל השאר הם objects שמועברים by reference