با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
در این جلسه قصد داریم نحوه تعریف توابع در جاوا اسکریپت JavaScript شامل فراخوانی تابع جاوا اسکریپت و بازگشت تابع جاوا اسکریپت را به شما آموزش دهیم.
توابع در جاوا اسکریپت بلوک های کدی هستند که برای انجام وظیفه یا کاری طراحی می شوند.
یک تابع در جاوا اسکریپت هنگامی اجرا می شود که آن را فراخوانی کنیم.
1 2 3 | function myFunction(p1, p2) { return p1 * p2; // The function returns the product of p1 and p2 } |
تعریف توابع در جاوا اسکریپت با کلمه کلیدی Function صورت می گیرد که در ادامه آن نام تابع با پرانتز () می آید.
نام توابع می تواند شامل حروف، ارقام، آندرلاین و علامت دلار باشد. (قوانین نام گذاری مانند قوانین متغیر ها است)
پرانتز ها می توانند شامل پارامتر باشند که با , از یکدیگر جدا می شوند.
کدی که توسط تابع اجرا می شود بین آکولاد قرار دارد:
1 2 3 | function name(parameter1, parameter2, parameter3) { // کد اجرایی } |
پارامتر های تابع در پرانتز لیست می شوند. (هنگام تعریف تابع)
آرگومان های تابع مقادیری هستند که هنگام فراخوانی شان دریافت می کنند.
در داخل تابع آرگومان ها یا پارامتر ها به عنوان متغیر محلی local عمل می کنند.
همانطور که گفتیم تابع هنگامی اجرا می شود که توسط چیزی فرخوانده شده باشد:
هنگامی که جاوا اسکریپت به دستور return می رسد، اجرای تابع متوقف می شود.
اگر تابع از یک جایی در کد فراخوانی شده باشد،جاوا اسکریپت جریان اجرا را به همان محل باز میگرداند.
توابع اغلب یک مقدار بازگشتی را محاسبه می کنند که این مقدار به فرخوانی کننده داده می شود:
1 2 3 4 5 | var x = myFunction(4, 3); // Function is called, return value will end up in x function myFunction(a, b) { return a * b; // Function returns the product of a and b } |
نتیجه مثال بالا:
1 | 12 |
استفاده مجدد از کد: شما می توانید یک کد را یک بار تعریف کرده و بار ها از آن استفاده کنید.
همچنین این امکان وجود دارد تا یک کد را با آرگومان های مختلفی اجرا کرد تا نتایج مختلفی بدست آید.
مثال تبدیل درجه فارنهایت به سلسیوس:
1 2 3 4 | function toCelsius(fahrenheit) { return (5/9) * (fahrenheit-32); } document.getElementById("demo").innerHTML = toCelsius(77); |
با استفاده از مثال بالا، به Celsius اشاره به شیء تابع، و به ()Celsius به نتیجه تابع اشاره دارد.
دسترسی به یک تابع بدون () به جای نتیجه عملکرد تابع تعریف می شود:
1 2 3 4 | function toCelsius(fahrenheit) { return (5/9) * (fahrenheit-32); } document.getElementById("demo").innerHTML = toCelsius; |
توابع در جاوا اسکریپت میتوانند همانطور که متغیر استفاده می شوند، به کار گرفته شوند.
1 2 | var x = toCelsius(77); var text = "The temperature is " + x + " Celsius"; |
1 | var text = "The temperature is " + toCelsius(77) + " Celsius"; |
متغیرهایی که در یک تابع جاوا اسکریپت اعلام شده اند، به تابع LOCAL تبدیل می شوند.
متغیرهای محلی تنها از طریق تابع قابل دسترسی هستند.
1 2 3 4 5 6 7 8 | // code here can NOT use carName function myFunction() { var carName = "Volvo"; // code here CAN use carName } // code here can NOT use carName |
جلسه کار با توابع در جاوا اسکریپت نیر به پایان رسید.
در جلسه بعد به مبحث اشیا در جاوا اسکریپت خواهیم پرداخت. با ما همراه باشید.
همچنین می توانید نظرات و سوالات خود را از طریق بخش نظرات با ما در میان بگذارید.
علی
سلام و عرض ادب
بنده آموزش های شما رو به صورت مستمر دنبال می کنم. بسیار عالی است. فقط یه سوال:
در قسمت آخر که یه برنامه در مورد متغیرهای محلی تنظیم کردید، دلیل استفاده از myFunction() در خط اول اسکریپت موردنظر چیه؟
پی وی لرن
سلام
در این قسمت ما یک تابع را تعریف کردیم که در آن نوع متغییر و رشته مورد نظر را قرار دادیم تا چاپ شود حالا برای اینکه این تابع چاپ شود ما تابع ()myFunction خودمان را در ابتدا قرار دادیم که اجرا شود (البته در انتها تابع تعریف شود هم امکان اجرا وجود دارد).
فرید
سلام بهترین وب سایت آموزشی زبان برنامه نویسی هستین !
بقیه وب سایت ها فقط دنبال کسب در آمد از جیب هنر جو هستن . لطفا ادامه بدین ممنون
پی وی لرن
ممنون، نظر لطف شماست
پی وی لرن
ممنون
نظر لطف شماست
elmira
سلام.
من مفهوم وجود function های موجود در متدهایی مثل setTimeout(function(){
و یا then(function(){}
رو در نمیکنم، چرا وقتی setTimeout که خودش یک متد هست باید داخلش function نوشته بشه!؟ و اصولاً این نوع function های بدون نام چکاره اند؟
صادق
سلام.
این نوع توابعی که به عنوان پارامتر یک تابع دیگه (مثل همین ()setTimeout که خودش تابع میگیره) تعریف میشن، توابع callback یا همون callback functions هستند. کاربرد این نوع تابع ها در هنگام کار با رویداد های مختلف مثل کلیک کردن موس، کیبورد، پایان یک زمان مشخص، پایان یک فعالیت مشخص مثل خواندن از فایل و … هستند. وقتی رویداد مورد نظرمون اتفاق بیفته، توابع callback توسط توابعی که اون ها رو به عنوان پارامتر گرفته اجرا میشن. درسته که خود ()setTimeout یک تابع هست اما کار این تابع یه چیز دیگه است (منتظر رویداد هست). تابع ()setTimeout یا هر نوع تابع دیگری از این قبیل، از پیش تعریف شده هستند و ما نمی تونیم دستورات خودمون رو دوباره توی این توابع بنویسیم مگه با استفاده از توابع callback.
صادق
شاید با خودتون فکر کنید که چرا کد خود تابع ()setTimeout رو تغییر نمیدیم؟! باید بگم که باید این توابع مثل ()setTimeout یا ()then داخل خود جاوا اسکریپت نوشته شدن و برای تغییر دادنشون باید javascript engine که وظیفه تفسیر و اجرای کد های جاوا اسکریپت رو داره تغییر بدیم. تازه اگه موفق بشیم فقط تونستیم موتور جاوا اسکریپت مرورگر خودمون رو تغییر دادیم و برای اینکه برای هر کاربر هم کار کنه، باید javascript engine مرورگر اون ها رو هم تغییر بدیم. خب این کار اولا خیلی غیر منطقی و دوما عملا ناممکن هست. چون که مرورگر ها اجازه تغییر توی javascript engine خودشون رو نمیدن و فقط توسعه دهندگان خودشون اجازه این کار رو دارن و بعد از تغییر به صورت آپدیت منتشر می کنن. حالا اصلا بتونیم همه این کار ها رو هم انجام بدیم! اگه خواستیم کدمون رو تغییر بدیم چی؟