دوره مجازی جاوااسکریپت (جلسه 7): تعریف توابع دلخواه در جاوااسکریپت، نکات و ترفندها

دسته بندی: جاوا اسکریپت
زمان مطالعه: ۲ دقیقه
۰۵ خرداد ۱۳۹۴

در جلسه امروز به بحث توابع خواهیم پرداخت و آموزش می دیم که به چه شکلی باید توابع دلخواه رو در جاوااسکریپت تعریف و ازشون استفاده کرد . در جاوااسکریپت برای تعریف توابع و استفاده از اونها روش های مختلفی وجود داره و ویژگی های خیلی منحصر فه فردی هم در این زبان وجود داره که امروز در موردش صحبت میکنیم .

مطالب مطرح شده در این جلسه عبارتند از :

  • بحث در مورد عدم امکان تعریف دو تابع و نام های یکسان
  • متد های شی window و عدم نیاز به نام بردن خود شئ window برای استفاده از آن ها
  • رفع مشکل تابع print استفاده شده در جلسات گذشته
  • آشنایی با قابلیت refactor و تغیر نام سراسری متغیر ها و توابع در کل پروژه درون phpStorm
  • بیان نحوه برنامه نویسی بدون توابع و مشکلات عمده آن با ذکر مثال
  • مزیت های عمده استفاده از توابع در برنامه نویسی و ایجاد نظم و تقسیم بندی وظایف در کدها
  • نحوه تعریف تابع به صورت Function Declarations
  • ذکر نکات مهم در مورد توابع و قابلیت رفتار با آنها به صورت متغیر
  • Function Hoisting در جاوااسکریت و به بالا آوردن خودکار تعریف توابع
  • نحوه تعریف تابع به شکل Function Expressions
  • توابع ناشناس (anonymous functions) در جاوااسکریپت
  • توابع خود صدا زننده (Self-Invoking Functions)
  • صحبت در مورد پارامترهای توابع
  • نحوه انتساب مقدار پیشفرض برای پارامترها
  • نحوه دریافت تعداد مختفی از پارامترها در یک تابع و مدیریت و استفاده از پارامترها
  • توابع بازگشتی و نحوه کار آن ها
  • ذکر مثالی از پیاده سازی یک تابع به شکل بازگشتی
  • تمرین : ایجاد تغیر در تابع print پیشفرض جاوااسکریپت و کسب اجازه از کاربر برای چاپ صفحه
  • تمرین : تغیر تابع nicePrint برای چاپ همه نوع داده با قابلیت دریافت تعداد مختلفی از پارامترها
  • تمرین : نوشتن تابع به توان رساندن با استفاده از روش بازگشتی
  • تمرین : تفاوت بین call by reference و call by value در پاس دادن پارامترهای تابع؟
  • پاسخ تمرین ها در جلسه 9 دوره داده شده است!
:: توجه

این مطلب یک جلسه از آموزش javascript می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش javascript

نویسنده
بیش از 15 سال هست که برنامه نویسی می کنم و از بین همه زبون هایی که کار کردم جاوا، اسمبلی و php رو دوست دارم. دانشجوی دکترای نرم افزارم و توی دانشگاه روی پردازش بیگ دیتا و پردازش موازی کار کردم و عاشق چالش از هر نوعیش هستم! سون لرن مثل بچه منه که 12 سال براش وقت گذاشتم، اینجا همه تلاش می کنیم از شروع یادگیری تا ورود به بازر کار حوزه برنامه نویسی و IT همراهتون باشیم.

جلسات دوره

نظرات کاربران

alireza fatehi

سلام و عرض ادب خدمت استاد گرامی
وقتی یک ابجکت تعریف میکنیم با استفاده از toString() نحوه تعریف اون آبجکت را میتوانیم ببینیم .
مثلا:
function arrSum(arr) {
var i , sum = 0;
for(i = 0 ; i < arr.length ; i++){
sum += arr[i];
}
return sum;
}
document.write(arrSum.toString());

ایا این امکان وجود دارد که اشیا پیش ساخته مثل Date هم نحوه تعریف اونو هم ببینیم به چه شکل درون جاوااسکریپت نوشته شده .

ممنون از لطف شما

سهیل بشردوست

درود، تمرین ها خیلی خوب بودن و فکر می کنم در سطح متوسط بودند، البته به جز تمرین آخر که در حقیقت تحقیق بود

hashem

خیلی مخلصیم استاد ، ارادتمند شماییم ، این جلسه چقدر سخت بود ، بازدهیم کم بود نمیدونم چرا؟ باید چند جا دیگه بگردم دنبال این توابع ،
استاد خیلی ببخشید یک سوال داشتم ؟ دوره طراحی وب ساده تر بود که من راحتتر یاد می گرفتم یا شما اون دوره رو بهتر برگزار کردید ؟
بازهم دم شما گرم ،خیلی ممنون از شما با سایت خوبی که دارید انشاالله که سایتتون متشکل از تیم قدرتمندی بشه که تمام اساتید خبره ای مثل خودتون جمع بشن و هر آموزشی رو که ما می خوایم فقط به سایت شما رحوع کنیم

Pezhman Heidary

با سلام و خسته نباشید خدمت شما،،،ما از چه سایتی و منبعی میتونیم درمورد این تمرینات اطلاعات کسب کنیم،مثلا تمرین اخر جلسه هفتم،درموردر …call value,پیدا کردنش برای من غیر ممکن بود مگر از سایت های خارجی که متاسفانه اصلا متوجه نمیشم!ویا تمرین توان ب صورت تابع بازگشتی،اگه ممکنه یه منبع معرفی کنید که ما بتونیم ازش کمک بگیریم،استاد.

لقمان آوند

حقیقتا این موارد خاص رو باید سرچ کنید. شاید نشه یه منبع خاص برای این موارد معرفی کرد.

313iman313

سلام من بخش توابع بازگشتی رو درست متوجه نشدم یعنی چجوری میشه ؟‌ اونجایی که میگین

 return n *  

factorial (n-1) الان فاکتوریل جاش چه عددی میشه ؟‌ و اونجا n ضربدر یه عدد میشه یا خیر دوباره تا بع فراخانی میشه و فقط از n یک مقدار کم میشه ؟‌ و اینکه اصلا از همه چی بگذریم که اخر باید ۱ return بشه چون این ضرب ها که در جایی ذخیره نمیشن فقط ضرب میشن و بر میگردونن و اون برگشته جایی ذخیره نمیشه تا وقتی که n برسه به ۱ و در هر صورت باید 1 بر گشت داده بشه من نمیدونم چجوری این بخشی فاکتوریل داره برنامه رو درست اجرا میکنه !؟!؟!؟؟!؟

لقمان آوند

سلام
بحثش فنی هست و توضیحات رو توی ویدیو دادیم. صدا زدن ها و مقادیر بازگشتی همه تو استک ذخیره می شن در پس زمینه که شما متوجهش نیستید. اگر جزئی تر سوال داشتید تماس بگیرید پایخ کیدم بهتون.

زهرا مقصودی

سلام در مورد تمرینی که برای بازنویسی تابع پرینت داده بودید سوال داشتم
وقتی من کد زیر رو مینویسم کاملا درست جواب میده:

var origPrint = print;
print = function () {
var a = window.confirm(‘آیا مطمئن هستید؟’);
if (a == true) {
return origPrint();
} else
return;
}
اما وقتی متغیر origPrint رو به صورت محلی داخل تابع تعریف میکنم هر چقدر که از پنجره confirm ، اوکی رو میزنم باز پنجره confirm باز میشه تا اینکه کنسل رو بزنم ، ممنون میشم راهنمایی کنید دلیلش چیه و چرا اینطورمیشه

لقمان آوند

تعریف درون تابع اشتباهه اینجا. باعث ایجاد چرخه میشه. اگر توی تابع به صورت محلی تعریف کنید مقدار origPrint هم دقیقا میشه همون print که خودمون داریم تعریف می کنیم و وقتی کانفیرم رو ok کنید مجددا خود تابع صدا زده میشه و دوباره کانفیرم میاد!
باید قبل از اینکه تابع print رو تعریف کنید مقدار اصلی اون رو در متغیر دیگه نگه دارید!

Aria Banazadeh

سلام اقای اوند من تو تمرین چاپ انوع داده ها مشکل داشتم ولی با توجه به فهم خودم اون کدو به این شکل دراوردم که برای object هم مطمعین نیستم

  function Int (a)
 {
  var a,sum;
  for(a = 0;a&lt;arguments.length ;a++)
  {
   sum += arguments[a]
  }
 }
 function string (b)
 {
  var b;
  for(b =0;b&lt;arguments.length;b++)
  {
   window.print(arguments[b]+ &quot; - &quot;)
  }
 }
 function object (s)
 {
  var s;
  for(s in arguments)
  {
     window.print( arguments[s.name] + &quot; : &quot; arguments[s.value])
  }
 }
لقمان آوند

سلام
منظورم این نبود. در جلسات بعدی جوابش رو دادیم می تونید بعدا با اون مقایسه کنید …

Aria Banazadeh

با سلام تمرین override رو به این صورت اوردم اگه میشه ی نگاهی بندازید

 function Myalert(a)
  {
   widnow.alert(a)
  }
var print = window.print;
window.print= function()
{
 var q = window.confirm("ایا شما مزمعینید که میخواهید حساب کاربریتان را حذف کنید؟")
 if(q==true)
 {
   Myalert("اکانت شما با موفقیت حذف شد!")
   print();
  }
 else {
  Myalert("شما از حدف اکانت خود انصراف  دادید")
 } 
}
window.print;
لقمان آوند

روش کلیتون برای override تابع پرینت درسته .

Sahar Dida

استاد آوند خسته نباشین،واقعا تدریستون عالیه
از اینکه تمام مطالبو رو قشنگ توضیح میدین ممنونم خیلی از مباحثی که تو دانشگاه خوندیم تازه واسم جا افتادن 😀

لقمان آوند

ممنون از لطفتون
خوشحالیم که رضایتتون رو می بینیم.

Aria Banazadeh

ببخشید سلام من تازه ثبت نام کردم زنگ زده بودم از شما مشاوره بگیرم 🙁 هیچ کدوم ز این تمرینارو نمیتونم حل کنم برم جلسه های بعدیو ببینم ؟

وحید صالحی

مشکلی نیست ناراحت و ناامید نباشید مباحث رو چندین بار مرور کنید با تمرین زیاد توانایش رو پیدا میکنید

hassani

استاد راست میگن دیگه یه شعر هست که میگه:
شبا که ما میخوابیم
.
.
.
چی؟
آقا پلیسه
.
.
. نه
آقای آوند بیداره
ما خواب خوش میبینیم
استاد آموزش ها رو میده

لقمان آوند

ممنون از بیان این نکته
موفق باشید

لقمان آوند

بله درسته

پایان زمان پشتیبانی

دانشجوی گرامی، بازه پشتیبانی فعال برای این دوره ۳ ماه است که برای شما به پایان رسیده است.

شما هم چنان می توانید سوالات خود را در این قسمت بپرسید اما اولویت پاسخ گویی با دانشجویانی است که بازه پشتیبانی فعال دارند.

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.
گزارش مشکل