Common Mistakes

در جاوااسکریپت، برخی اشتباهات رایج می‌توانند باعث خطا، رفتار غیرمنتظره یا کاهش عملکرد شوند.
آگاهی از این اشتباهات کمک می‌کند کد تمیزتر و حرفه‌ای‌تر بنویسیم.

🔹 1. استفاده از var به جای let یا const

  • var تابع‌محور است و می‌تواند باعث تداخل در Scope شود.

  • بهتر است همیشه از let و const استفاده کنید.

var x = 10; if (true) { var x = 20; // بازنویسی متغیر سطح بالا } console.log(x); // 20 (ممکن است ناخواسته باشد)

🔹 2. عدم استفاده از "use strict"

  • بدون Strict Mode، متغیرهای بدون تعریف خودکار ایجاد می‌شوند و خطاها پنهان می‌مانند.

x = 5; // بدون var/let/const، خطا ایجاد نمی‌شود

🔹 3. اشتباه در مقایسه مقادیر

  • استفاده از == به جای === می‌تواند باعث تبدیل نوع غیرمنتظره شود.

console.log(0 == "0"); // true console.log(0 === "0"); // false

🔹 4. فراموش کردن مدیریت خطا در عملیات غیرهمزمان

  • نادیده گرفتن .catch() یا try/catch در Promiseها باعث unhandled rejection می‌شود.

fetch("invalid_url") .then(response => response.json()); // خطا، بدون catch

🔹 5. Callback Hell

  • استفاده زیاد از توابع تو در تو باعث کد پیچیده و غیرقابل خواندن می‌شود.

doSomething(function(result1) { doAnother(result1, function(result2) { doMore(result2, function(result3) { console.log(result3); }); }); });

راه حل: استفاده از Promises و Async/Await

🔹 6. اشتباه در استفاده از this

  • مقدار this بستگی به نحوه فراخوانی تابع دارد و می‌تواند باعث اشتباه شود.

const obj = { name: "Ali", greet: function() { console.log(this.name); } }; const greetFunc = obj.greet; greetFunc(); // undefined یا خطا در strict mode

🔹 7. نادیده گرفتن Memory Leaks

  • نگهداری آدرس‌های غیرضروری در متغیرها یا Closureها باعث افزایش حافظه مصرفی می‌شود.

🔹 8. استفاده نادرست از حلقه‌ها با var و async

for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1000); } // خروجی بعد از 1 ثانیه: 3 3 3

راه حل: استفاده از let به جای var

for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1000); } // خروجی: 0 1 2

✅ خلاصه

  • اشتباهات رایج: استفاده از var، عدم استفاده از strict mode، مقایسه نادرست، مدیریت خطا، Callback Hell، اشتباه در this، Memory Leaks، حلقه‌ها و async

  • پیشگیری: استفاده از let/const, "use strict", Promises/Async-Await، بررسی this، آزادسازی منابع، رعایت Scope صحیح