بهترین روش‌های من – JavaScript

۱. غیرفعال کردن کش

Firefox:
باز کردن Developer Tools -> باز کردن تنظیمات (F1) -> "Disable HTTP Cache (when toolbox is open)"

Chrome:
باز کردن Developer Tools -> باز کردن تنظیمات (F1) -> "Disable cache (while DevTools is open)"

۲. کنسول JS را باز نگه دارید

در Dev Tools زبانه‌ی Console را باز کنید و باز نگه دارید، تا مرحله‌ی ۱ مؤثر بماند و ضمناً خطاهای شبکه و JS را هم ببینید.

این افزونه را هم توصیه می‌کنم که خطاهای JS را حتی بهتر نشان می‌دهد، برای وقتی که خودتان یادتان می‌رود حواستان به آن‌ها باشد:

۳. JavaScript: مطالعه‌ی واجب «You Don't Know JS»

۴. نقطه‌ویرگول

// you want to return 5 and have ugly formatting:
return
5

// JavaScript Interpretation:
return;
5;

۵. عملگرهای منطقی && و ||

عبارت‌ها (Expressions) را هم می‌توان این‌طور به هم بست، و این کوتاه‌ترین دستور if ممکن را فراهم می‌کند – Syntax Sugar:

از این روش برای مقادیر پیش‌فرض هم زیاد استفاده می‌شود:

۶. آیا JavaScript با ارجاع (pass-by-reference) پاس می‌دهد یا با مقدار (pass-by-value)؟

در JavaScript ماجرا جالب است. مثال:

function changeStuff(a, b, c) {
    a = a * 10;
    b.item = "changed";
    c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);
console.log(obj1.item);
console.log(obj2.item);

خروجی زیر را تولید می‌کند:

10
changed
unchanged

اگر obj1 اصلاً ارجاع نبود، تغییر obj1.item هیچ اثری روی obj1 بیرون از تابع نمی‌داشت.

اگر آرگومان یک ارجاع واقعی بود، همه‌چیز تغییر می‌کرد: num برابر ۱۰۰ می‌شد و obj2.item مقدار «changed» را می‌داشت. اما در عوض num همان ۱۰ می‌ماند و obj2.item همان «unchanged» باقی می‌ماند.

در واقع عنصر ارسالی با مقدار پاس داده می‌شود. اما چیزی که با مقدار پاس داده می‌شود، خودش یک ارجاع است. از نظر فنی به این فراخوانی با اشتراک (call-by-sharing) می‌گویند.

در عمل یعنی: اگر خود پارامتر را تغییر دهید (مثل num و obj2)، اثری روی شیء اصلی که به تابع پاس داده شده ندارد. اما اگر مقادیر درونی پارامتر را تغییر دهید، این تغییرات اعمال می‌شوند (مثل obj1).