Debugger JS
Debugger JS
نمونه های دیگر که در آن تنظیم مجدد کامپایلر می تواند عوارض جانبی قابل مشاهده ایجاد کند (و بنابراین باید از آن استفاده شود) شامل مواردی مانند هر تماس عملکرد با عوارض جانبی (حتی و به ویژه توابع دریافت کننده) یا اشیاء پروکسی ES6 است (به عنوان ES6 و فراتر از این کتابخانه ها مراجعه کنید ).
در نظر بگیرید:
function foo() {
console.log( b );
return 1;
} v
ar a, b, c;
// ES5.1 getter literal syntax
c = {
get bar() {
console.log( a );
return 1;
}
};
a = 10;
b = 30;
a += foo(); // 30
b += c.bar; // 11
console.log( a + b ); // 42
اگر برای اظهارات کنسول (..) در این قطعه (فقط به عنوان یک شکل مناسب از عوارض جانبی قابل مشاهده برای تصویر استفاده می شد) ، احتمالاً موتور JS در صورت تمایل رایگان بود (چه کسی می داند (چه کسی می داند اگر این کار!؟) ، برای مرتب کردن کد به:
// …
a = 10 + foo();
b = 30 + c.bar;
// …
در حالی که معناشناسی JS خوشبختانه ما را از کابوسهای قابل مشاهده که به نظر می رسد تنظیم مجدد کامپایلر در معرض خطر است ، محافظت می کند ، اما هنوز هم درک این نکته مهم است که چگونه یک پیوندی که بین نحوه تألیف کد منبع (به روشی از بالا به پایین) وجود دارد ، وجود دارد. روش آن پس از تدوین اجرا می شود.
تنظیم مجدد بیانیه کامپایلر تقریباً یک متفور خرد برای همزمانی و تعامل است. به عنوان یک مفهوم کلی ، چنین آگاهی می تواند به شما در درک بهتر مسائل جریان کد async JS کمک کند
باز بینی
یک برنامه JavaScript (عملاً) همیشه به دو یا چند قطعه شکسته شده است ، جایی که اولین قطعه اکنون اجرا می شود و قسمت بعدی بعداً در پاسخ به یک رویداد اجرا می شود. حتی اگر این برنامه به صورت chunk-chunk اجرا شود ، همه آنها دسترسی یکسان به دامنه برنامه و حالت را دارند ، بنابراین هر اصلاح به ایالت در بالای کشور قبلی انجام می شود.
هر زمان که رویدادهایی برای اجرا وجود دارد ، حلقه رویداد تا زمانی که صف خالی باشد اجرا می شود. هر تکرار از حلقه رویداد “تیک” است. تعامل کاربر ، IO و Timers Enqueue Events در صف رویداد.
در هر لحظه ، فقط یک رویداد می تواند از صف در یک زمان پردازش شود. در حالی که یک رویداد در حال اجرا است ، می تواند مستقیم یا غیرمستقیم باعث ایجاد یک یا چند رویداد بعدی شود.
همزمانی زمانی است که دو یا چند زنجیره از رویدادها با گذشت زمان به هم می پیوندند ، به گونه ای که از دیدگاه سطح بالا ، به نظر می رسد که همزمان در حال اجرا هستند (حتی اگر در هر لحظه تنها یک رویداد پردازش شود).
به عنوان مثال برای اطمینان از سفارش یا جلوگیری از “شرایط مسابقه” ، اغلب انجام نوعی هماهنگی تعامل بین این “فرآیندهای” همزمان (به عنوان متمایز از فرآیندهای سیستم عامل) ضروری است. این “فرایندها” همچنین می توانند با شکستن خود در تکه های کوچکتر همکاری کنند و اجازه دهند “فرآیند” دیگر در هم تنیده شوند
قوانین ارسال دیدگاه در سایت