جاوا اسکریپت خوش زبان قسمت بیست و دوم
6، آنها همین کار را می کنند. توابع پیکان در سال 2015، بیشتر برای ساختن اضافه شدند این امکان وجود دارد که عبارات تابع کوچک را به روشی کمتر پرمخاطب بنویسید. به خوبی می شود
استفاده زیاد از آنها در فصل 5
پشته تماس
روشی که کنترل از طریق توابع جریان می یابد تا حدودی دخیل است. یک را بگیریم
نگاه دقیق تر به آن در اینجا یک برنامه ساده است که چند تابع را فراخوانی می کند:
تابع سلام (چه کسی) {
console.log(“سلام” + who);
}
سلام (“هری”);
console.log(“بای”);
اجرای این برنامه تقریباً به این صورت انجام می شود: تماس برای احوالپرسی باعث می شود
کنترل پرش به شروع آن تابع (خط 2). تابع کنسول را فرا می خواند
.log که کنترل را در دست می گیرد، کار خود را انجام می دهد و سپس کنترل را به خط 2 برمی گرداند
به انتهای تابع سلام می رسد، بنابراین به محلی که آن را فراخوانی کرده است برمی گردد.
که خط 4 است. خط بعد از آن دوباره console.log را فراخوانی می کند. پس از بازگشت،
برنامه به پایان خود می رسد
میتوانیم جریان کنترل را به صورت شماتیک به این صورت نشان دهیم:
در عملکرد نیست
در سلام
در console.log
در سلام
در عملکرد نیست
در console.log
در عملکرد نیست
از آنجایی که یک تابع هنگام بازگشت باید به مکانی که آن را فراخوانی کرده است برگردد، کامپیوتر باید زمینه ای را که از آن فراخوانی انجام شده را به خاطر بسپارد.
در یک مورد، console.log پس از اتمام باید به تابع greet برگردد.
در حالت دیگر به انتهای برنامه برمی گردد.
مکانی که کامپیوتر این متن را ذخیره می کند پشته تماس است. هر
زمانی که یک تابع فراخوانی می شود، زمینه فعلی در بالای این پشته ذخیره می شود.
وقتی یک تابع برمی گردد، زمینه بالایی را از پشته حذف می کند و از آن استفاده می کند
آن زمینه برای ادامه اجرا.
ذخیره سازی این پشته به فضایی در حافظه رایانه نیاز دارد. وقتی پشته
خیلی بزرگ می شود، کامپیوتر با پیامی مانند “فضای پشته تمام شده” از کار می افتد.
یا “بازگشت بیش از حد”. کد زیر با پرسیدن این موضوع را نشان می دهد
کامپیوتر یک سوال واقعا سخت است که باعث ایجاد یک رفت و برگشت بینهایت بین آنها می شود
دو عملکرد بلکه بی نهایت می شد، اگر کامپیوتر یک نامتناهی داشت
پشته. همانطور که هست، فضای خالی ما تمام خواهد شد، یا “باد کردن پشته”.
45
تابع مرغ() {
return egg();
}
تابع egg() {
return chicken();
}
console.log(chicken() + ” first first.”);
// → ??
استدلال های اختیاری
کد زیر مجاز است و بدون مشکل اجرا می شود:
تابع مربع(x) { بازگشت x * x; }
console.log(square(4, true, “hedgehog”));
// → 16
مربع را تنها با یک پارامتر تعریف کردیم. اما وقتی آن را با سه صدا می کنیم،
زبان شکایت نمی کند آرگومان های اضافی را نادیده می گیرد و محاسبه می کند
مربع اولی
جاوا اسکریپت در مورد تعداد آرگومانهایی که میدهید بسیار گسترده است
به یک تابع منتقل شود. اگر تعداد زیادی را پاس کنید، موارد اضافی نادیده گرفته می شوند. اگر شما
خیلی کم است، به پارامترهای از دست رفته مقدار تعریف نشده اختصاص داده می شود.
قوانین ارسال دیدگاه در سایت