Back to Question Center
0

توابع جاوا اسکریپت که تعریف و بازنویسی خود را دارند            توابع جاوا اسکریپت که تعریف و بازنویسی موضوعات خود را دارند: APIsReactTools & ؛ کتابخانه ها

1 answers:
توابع جاوا اسکریپت که تعریف و بازنویسی خود

توابع جاوا اسکریپت که تعریف و بازنویسی خود را دارندتوابع جاوا اسکریپت که تعریف و بازنویسی موضوعات خود را دارند:
APIsReactTools & LibrariesnpmRaw Semalt

زیر یک عصاره کوتاه از کتاب جدید ما، جاوا اسکریپت: نوبت به نینجا، نسخه 2، نوشته شده توسط دارن جونز است. این راهنمای مبتدی نهایی برای جاوا اسکریپت است. اعضای SitePoint Semalt دسترسی به عضویت خود را می یابند، یا می توانید نسخه ای را در فروشگاه های سراسر جهان خریداری کنید.

ماهیت پویای جاوا اسکریپت به این معنی است که یک تابع قادر است نه تنها خود را فراخوانی کند، بلکه خود را تعریف می کند و حتی خود را دوباره تعریف می کند - logo creator software free. این کار با اختصاص یک تابع ناشناس به یک متغیر است که همان نام تابع است.

Semalt عملکرد زیر:

     عملکرد حزب    {کنسول. ورود به سیستم ('وای این شگفت انگیز است!')؛party = function    {کنسول. ورود به سیستم ('وجود دارد، T شرت')؛}}    

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

     عملکرد حزب    {کنسول. ورود به سیستم ('وجود دارد، T شرت')؛}    

هر بار که تابع بعد از اولین بار فراخوانی می شود، پیام "وجود دارد، تی شرت گرفت" را وارد کنید:

     حزب   ؛<< وای این شگفت انگیز است!مهمانی - جشن  ؛<< 'وجود دارد، T شرت'مهمانی - جشن  ؛<< 'وجود دارد، T شرت'    

اگر تابع نیز به متغیر دیگری اختصاص داده شود، این متغیر تعریف تابع اولیه را حفظ خواهد کرد و نمی تواند بازنویسی شود. این به این دلیل است که تابع اصلی به یک متغیر اختصاص داده می شود، و سپس درون تابع، یک متغیر با همان نام تابع به یک تابع دیگر اختصاص داده می شود. شما می توانید نمونه ای از این را ببینید اگر ما یک متغیر نامیده می شود beachParty که به party function اختصاص داده شده قبل از برای اولین بار فراخوانی می شود تعریف مجدد:

     عملکرد حزب    {کنسول. ورود به سیستم ('وای این شگفت انگیز است!')؛party = function    {کنسول. ورود به سیستم ('وجود دارد، T شرت')؛}}const beachParty = حزب؛ // توجه داشته باشید که عملکرد حزب مورد استفاده قرار نگرفته استbeachParty   ؛ // تابع حزب    در حال حاضر تعریف شده است، حتی اگر آن را به صراحت نامیده نشده است<< وای این شگفت انگیز است!مهمانی - جشن  ؛<< 'وجود دارد، T شرت'beachParty   ؛ // اما این تابع تعریف نشده است<< وای این شگفت انگیز است!beachParty   ؛ // مهم نیست چند بار این نام خوانده شده باقی خواهد ماند<< وای این شگفت انگیز است!    

از دست دادن خواص

مراقب باشید: اگر هر یک از خواص قبلا بر روی تابع تعیین شده باشد، زمانی که تابع خود را دوباره تعریف می کند، از بین می رود. در مثال قبلی، می توانیم یک ویژگی موسیقی را تنظیم کنیم و بعد از آنکه تابع فراخوانی شده و دوباره تعریف شده دیگر وجود نداشته باشد:

     عملکرد حزب    {کنسول. ورود به سیستم ('وای این شگفت انگیز است!')؛party = function    {کنسول. ورود به سیستم ('وجود دارد، T شرت')؛}}مهمانی - جشن. موسیقی = 'جاز کلاسیک'؛ // یک ویژگی از تابع را تنظیم کنیدمهمانی - جشن  ؛<< "وای این شگفت انگیز است!"مهمانی - جشن. موسیقی؛ // تابع در حال حاضر تعریف شده است، بنابراین اموال وجود ندارد<< undefined     

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

بیایید نمونه ای از شیء داستانی ما که هنوز در تمام مرورگرها پشتیبانی کامل داشته باشد را بیابیم. در فصل آخر، ما بررسی کردیم که چگونه می توانیم از تشخیص ویژگی ها برای بررسی اینکه آیا این پشتیبانی می شود استفاده کنیم. اکنون می توانیم یک قدم جلوتر برویم: ما می توانیم یک تابع را بر اساس اینکه آیا روش های خاصی پشتیبانی می شوند تعریف کنیم. این بدان معنی است که ما فقط نیاز به پشتیبانی از اولین بار که تابع نامیده می شود را بررسی می کنیم:

     عملکرد سوار    {اگر (پنجره تک شاخ) {ride = function    {// برخی از کد هایی که با استفاده از روش های نام تجاری جدید و درخشان تک شاخ استفاده می شودبازگشت 'سوار بر اسب شاخدار بهترین است!'؛}} else {ride = function    {// برخی از کد که از روش های تسویه حساب قدیمی تر استفاده می کندبازگشت 'سوار بر اسب هنوز هم بسیار خوب است'؛}}بازگشت سوار   ؛}    

بعد از اینکه ما پنجره را بررسی کردیم. شیء وجود دارد (با بررسی برای اینکه آیا این حقیقت است)، ما ride تابع را با توجه به نتیجه بازنویسی کردیم. درست در انتهای تابع، ما آن را مجددا تماس می دهیم تا تابع بازنویسی در حال حاضر فراخوانی شود، و مقدار مربوطه به آن بازگردانده می شود. یکی از چیزهایی که باید از آن آگاه باشد این است که این تابع دو بار در اولین بار فراخوانی می شود، هرچند که در هر زمان بعد از آن، به کار می رود. بیایید نگاهی به نحوه کارکرد آن داشته باشیم:

     سوار   ؛ // تابع خود را بازنویسی می کند، سپس خودش را می خواند<< 'سوار بر اسب هنوز هم بسیار خوب است'    

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

     سوار شدن<< تابع ride    {بازگشت 'سوار بر اسب هنوز هم بسیار خوب است'؛}    

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

توابع بازگشتی

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

     تابع فاکتوریل (n) {اگر (n === 0) {بازگشت 1؛} else {بازگشت n * فاکتوریل (n - 1)؛}}    

این تابع 1 را بازگرداند اگر 0 به عنوان یک استدلال ارائه شود (0 فاکتوریل 1 است)، در غیر این صورت آن استدلال توسط نتیجه خود را با یک استدلال یکی کمتر. تابع همچنان خود را فراخوانی می کند تا زمانی که نهایتا آرگومان 0 و 1 بازگردانده شود. این باعث می شود که ضرب 1، 2، 3 و تمام اعداد به آرگومان اصلی رسید.

مثال دیگری از دنیای ریاضیات حدس Semalt است. این یک مشکل است که ساده است، اما تا کنون حل نشده است. این شامل گرفتن هر عدد صحیح مثبت و پیروی از این قوانین می شود

  • اگر عدد صحیح باشد، آن را با دو

    تقسیم کنید.
  • اگر عدد عدد است، آن را سه برابر ضرب کنید و یک عدد را اضافه کنید

به عنوان مثال، اگر ما با شماره 18 شروع کنیم، توالی زیر را خواهیم داشت:

18، 9، 28، 14، 7، 22، 11، 34، 17، 52، 26، 13، 40، 20، 10، 5، 16، 8، 4، 2، 1، 4، 2، 1 ، .

همانطور که می بینید، دنباله در یک حلقه در انتهای گیر می شود، دوچرخه سواری از طریق "4،2،1". فرمول Collatz بیان می کند که هر عدد صحیح مثبت توالی ایجاد می کند که در این حلقه به پایان می رسد. این برای تمام اعداد تا 5 × 2 × حل تایید شده است اما هیچ اثبات وجود ندارد که برای تمام عدد صحیح بالاتر از این درست باشد. طول} گام $ {sequence} `؛}اگر (n٪ 2 === 0) {n = n / 2؛} else {n = 3 * n + 1؛}بازگشت collatz (n، [.دنباله، n])؛}

این تابع یک عدد را به عنوان یک پارامتر می گیرد و همچنین یک پارامتر دیگر به نام sequence که مقدار پیش فرض یک آرایه حاوی پارامتر اول است. پارامتر دوم فقط زمانی استفاده می شود که تابع خود را به صورت بازگشتی به کار می گیرد.

اولین چیزی که تابع انجام می دهد، تست است تا ببیند آیا n دارای مقدار 1 است. اگر این کار را انجام دهد، تابع یک پیام را ارسال می کند تا نشان دهد که چه تعداد گام آن را گرفته است. اگر مقدار آن 1 نرسیده باشد، اگر مقدار n حتی (در این صورت آن را به 2 تقسیم می کند)، یا عددی را بررسی می کند، در این صورت آن را 3 برابر ضرب می کند و سپس اضافه می کند. تابع سپس خود را می خواند، ارزش جدیدی از n و توالی جدید را به عنوان استدلال ارائه می کند. دنباله جدید با قرار دادن توالی قدیمی و مقدار n در یک آرایه جدید و اعمال اپراتور گسترش به توالی قدیمی ساخته می شود.

Semalt ببینید چه اتفاقی می افتد به شماره 18:

     collatz (18)؛<< 'پیگیری 21 مرحله انجام شد. این 18،9،28،14،7،22،11،34،17،52،26،13،40،20،10،5،16،8،4،2،1 '    

همانطور که می بینید، 21 مرحله می گیرد، اما در نهایت، آن را در مرحله ی اول به پایان می رساند

در استفاده از تابع بروید و ببینید اگر شما می توانید یک مقدار بالاتر از 5 × 2 ×⁰ پیدا کنید که در 1 به پایان نمی رسد - اگر می خواهید معروف شوید!

February 28, 2018