/ / Javascript: פונקציה בתפקוד. שפת תכנות JS

פונקציה. שפת תכנות JS

הרעיונות של יצירת תוכן דינמי על משאב האינטרנט הפכו לנורמה. דפים סטטיים ובניית אתר תבנית השלימו לבסוף את משימתם.

עם זאת, משאב אינטרנט מודרני אינו חייב להיות מיוצג על ידי קבוצה של דפים שנוצרו על ידי השרת ומעודכנת על ידי הדפדפן (JS + AJAX).

פונקציית JavaScript פונקציה

משאב אינטרנט בזמן ההגעה של המבקר יכול להיות כמה כותרות עבור הפרוטוקול, כמה טקסט של "ראש", כמה שורות של קוד בגוף "וזהו. השאר "לחשוב על"בתהליך של מבקר, זה האתר האידיאלי או אחד השואף להיות אחד.

מקום תיאור המהות של הפונקציות

Javascript ניסיון שנצבר במשך עשרות שנים. יש לו היסטוריה משמעותית של פיתוח, צוות מודרני, מוסמך של יוצרי ומפתחים. השפה נחשבת היטב, אמין, יפה נותן הזדמנות אמיתית עבור מפתחים לכתוב קוד הגון ולשפר את עצמם.

שגיאת javascript המבצע אינו מאובטח

הרעיון של אלגוריתם מחוץ לתפקוד חסר כאן.עיקרון. כמובן, היזם יכול בכל מקום בדף להכניס קוד סקריפט כדי להכניס אותו והוא יבוצע. אבל מה הטעם בקוד, אשר מבוצע רק פעם אחת: בעת ההפעלה (עומס) דף? אלא אם כן ניתן לקבוע את הערכים ההתחלתיים של כמה משתנים משמעותיים.

התסריט הוא מקום לתאר את המשתנים הרצוייםפונקציות, ולא חתיכת קוד טובה שנכתבה לשמה. זוהי מערכת הפונקציות החיוניות והמשמעותיות, אולי - הקשר ההדדי ההדדי שלהן, אך לעתים קרובות יותר הכל שונה. מקום תיאור הפונקציה ומקום יישומה אינם זהים.

זה לא הכרחי כי הפונקציה להיותלקרוא פונקציה אחרת ישירות, ניתן לעשות זאת בעקיפין באמצעות קוד קוד דינמי. המבקר מקבל החלטה במסגרת קוד זה ומערכת שונה לחלוטין של פונקציות מופעלת.

דינמיקה פונקציונלית

דינמיקה פונקציונלית היא לא רקלא כל כך הרבה מטפלים שהוקצו אלמנטים של הדף, אלה הם הפונקציות המרכיבות את האלמנטים של הדף, ואת המטפלים המיידיים יכול גם לשנות.

לחזור

הפעולה על הדף נפרשת בהתאם לאלמנטים שלה ואת התנהגות המבקר על זה. תנועות עכבר, לחצני לוח מקשים, קליקים, אירועי פריטים ומצבים אחרים מובילים להפעלה של הפונקציות הרצויות.

בתחילה אין עקביות ואין הקבלה. יש תגובה מספקת של משאב אינטרנט לאירועים. כמה מהר JavaScript מבצע פונקציה מסוימת תלוי בהרבה טכני (מחשב, קווי תקשורת) וסמנטית (אלגוריתם ההיגיון, תחום הנושא, משמעות המשימה) גורמים.

למעשה, ניתן לטעון כי משהו עבדבמקביל, אבל משהו יתממש אחרי משהו, אבל אין לזה משמעות מיוחדת. חשוב כי הפונקציה JavaScript היא היכולת ליצור תגובה נאותה את הפעולות של המבקר.

זוהי חשיבה חדשה בפיתוח: עיבוד מידע מבוזר במעמקי דפדפן יחיד!

תחביר של משתנים ופונקציות

משתני JavaScript ממוקמים כמו בתג."סקריפט", ובגוף הפונקציה. פונקציות מוגדרים באותו אופן. אין נקודה מיוחדת לכתוב פונקציה אחרת בתוך פונקציה, אבל זה עשוי להיות נחוץ מסיבות שונות ומבוססות.

תיאור הפונקציה מתחיל בדרך כלל עם מילת המפתח "פונקציה", ולאחר מכן את שמו, את רשימת הארגומנטים בסוגריים מופרדים על ידי פסיק ואת גוף הפונקציה בסוגריים מסולסלים.

פונקציית JavaScript כדי לתפקד

דוגמה זו מתארת ​​שתי פונקציות המספקות החלפת AJAX בין הדף לשרת. המשתנה scXHR מתואר לעיל, ולכן הוא זמין הן ב- InitXML והן בתוך WaitReplySC.

שם הפונקציה והפרמטר "פונקציה"

הוצגה כאן גרסה לא-סינכרונית, מתיפונקציית JavaScript בפונקציה נקראת לאחר שהשרת מגיב. במקביל, לאחר קבלת תגובה מהשרת, WaitReplySC מתייחס תגי הדף, ממלא אותם עם מידע שהתקבל שיחות פונקציות אחרות, כי ייתכן גם ליזום את הבקשה הבאה לשרת.

חשוב גם לציין כאן כי WaitReplySC הוא פונקציה. אבל בתור scXHR.onreadystate = WaitReplySC הוא מועבר כפרמטר. זהו כלל כללי להעברת פונקציות לתפקודים אחרים כפרמטרים. ציינתי סוגריים והעברתי להם את הפרמטר (פרמטרים) - הפונקציה תבוצע מיד. הוא העביר רק את השם, אז מה עם זה. שיחת הפונקציה תיעשה על ידי מי שקיבל את שמו.

הפונקציונליות המופעלת באמצעות AJAX מאפשרת לך לבצע פונקציית JavaScript להתקשר באמצעות נתונים שהתקבלו מהשרת. למעשה, שליחת בקשה לשרת, פונקציה אחת או אחרת אינה יכולה כלל "לדעת" באיזו פונקציה היא ניגשת ובאיזה מידע.

צא מהתפקוד והתוצאה שלו

אתה יכול לכתוב כל המפעילים בגוף הפונקציה.שפה, אשר, למעשה, לצורך זה נועד. משתנים בתוך ומחוץ הפונקציה זמינים בתוך הפונקציה, אבל לא אלה המתוארים פונקציות אחרות.

קריאה לפונקציה

אם אתה רוצה את הפונקציה לחזורהתוצאה, אתה יכול להשתמש מפעיל לחזור JavaScript: לחזור. ייתכן שיש מספר מספיק של הצהרות לחזור בגוף הפונקציה. אין צורך כלל כי הם יחזירו את התוצאה מאותו סוג.

בדרך כלל, מפתחים מאוד לכבד את ההזדמנות הזו, בהתאם למצב, לקבל החלטה לצאת את הפונקציה ברגע זה הופך אפשרי.

אין צורך לרוץ דרך האלגוריתם כולו של הפונקציה כאשר ניתן לצאת מוקדם יותר.

ארגומנטים פונקציונליים

ארגומנטים לפונקציה מועברים דרך הרשימהפסיק, סגורים בסוגריים ומיד לאחר שמו. שמות משתנים משמשים כארגומנטים, אך ניתן גם להעביר ערכים ישירות. כדי להעביר פונקציה לפונקציה ב- JavaScript, אתה רק צריך לציין את שמו ללא סוגריים.

משתני

בתוך הפונקציה, משתנה המשתנים זמין, בעל רכוש אורך. ניתן להתייחס לכל ארגומנט פונקציה באמצעות ארגומנטים [0], ארגומנטים [1], ... עד הארגומנטים האחרונים [argments.length-1].

שינוי הטענה הפונקציונלית הוא באמת בפניםאבל לא מחוץ לזה. על מנת לשנות משהו מחוץ לתפקוד, אתה צריך להשתמש לחזור המפעיל JavaScript, שדרכו להעביר את הערך הדרוש מבחוץ.

לאחר השלמת הפונקציה, כל זההיה קשור לביצועו, יושמד. בזמן ריצה, הפונקציה יכולה לשנות משתנים חיצוניים, למעט אלה המתוארים פונקציות אחרות, כולל אלה פנימיים.

טיעונים יש נכס callee כינועד לקרוא לפונקציה שמתבצעת בזמן נתון. אם אתה קורא לעצמך, אז האפשרות פונקציה JavaScript בפונקציה תאפשר רקורסיה.

שימוש בפונקציות

הפונקציה העיקרית היא דאגה לאירועים.דפדפן. כדי לעשות זאת, כמעט כל תג יש את היכולת לציין את שם האירוע ואת הפונקציה כי תהליכים זה. ניתן לציין אירועים מרובים, אך רק פונקציה אחת מצוינת עבור כל אירוע.

פונקציה אחת יכולה לשרת אלמנטים מרובים של הדף ואירועים מרובים. באמצעות הפרמטר "זה" ניתן להעביר מידע לפונקציה מהמקום שבו היא נקראה.

שימוש קלאסי של פונקציות JS -מטפלים באירועים על אלמנטים. בדוגמה זו, הפונקציה scfWecomeGo () או scfWelcomeCancel () תתקשר בטופס הכניסה / יציאה של המבקר, וכאשר תבחרו במצב ההפעלה, scfMenuItemClick (זה).

לחזור

במקרה האחרון, הפרמטר הוא "זה",אשר מאפשר לך באופן פלאי לגלות בדיוק איזה דיווה השיחה נובעת. באופן כללי, JavaScript הוא כל כך מושתל איכותית ב DOM והוא מאפשר לך לנווט את האלמנטים שלה כל כך בנוחות, כדי לאסוף את המידע הדרוש, כי דינמיקה הדף יכול להיות פשוט בלתי צפוי.

הפונקציה אינה חייבת להחזיר מחרוזת.תווים, מספר או פונקציה אחרת. הוא יכול להחזיר אלמנט HTML מלא, שבו יהיה מספר הכרחי של אלמנטים, עם המטפלים האירוע שלו.

הצבת אלמנט כזה בדף, היוצר יוצר פונקציונליות חדשה, וזה טוב במונחים של פתרון הבעיה ופגישה את האינטרסים של המבקרים, אבל קשה במונחים של יישום.

החל כזה פיתוח מלא התכונות,זה קל להתבלבל בקוד שלך, בשיחות פונקציה, ברגעים שבהם אחד או תוכן אחר של אחד או חלק אחר של הדף נוצר. לפני שאתם לוקחים את הכיוון הזה של הפיתוח, זה לא מזיק לשקול את הכל טוב.

על חשיבה מבוזרת

היזם צריך לחשוב ברמה של כל האלמנטים של הדף, ברמה של כל האירועים יש מושג ברור איך הכל קורה בפועל. זה קשה, אבל העבודה הזאת שווה את זה

פונקציות מערך

ב- JavaScript, ביצוע של פונקציה יכול להיותנדחה עד לאירוע, וייתכן שיהיו תפקידים רבים כאלה, ואפילו אירועים נוטים להתפשט ולהיכנס ל"יקף "המפעילים השונים.

שגיאת javascript המבצע אינו מאובטח

בדוגמה זו, במקום שנקרא בעברהפונקציה שיזמה את היצירה של פריט התפריט ניווט הקובץ. הארגון ההחלפה מניח, כלומר, ישנם רק שבעה קבצים בחלון שניתן למחוק ולעבד. ניתן לנווט בין אם על ידי לחיצה על קו הקובץ, או על ידי החצים על המקלדת, או בבלוקים של שבעה קווים.

בכל מקרה, יש פונקציות משלה. במילים אחרות, בדוגמה פשוטה כזו יש לכתוב כמה עשרות פונקציות שיגיבו לאירועים שונים, וחלק מהתפקודים האלה יטפלו באפשרויות ובמצבים שונים שאינם קשורים לאירועים כלל.

ביצועי פונקציה

לדוגמה, בעת מחיקת מחרוזת, התחתון צריךלעלות למעלה. כדי לעשות זאת, אתה צריך לעשות גם בחירה חדשה, אשר הוא trit ו מרווחי במונחים של משאבים, או לחשב מחדש את השורות, להשתמש בפונקציות של מערכים על JavaScript ו באלגנטיות להשיג את המטרה.

ארגומנטים ותוצאות של פונקציות

Javascript מאפשר לך להעביר את הקוד אלמדינה "תפקודית לחלוטין". בדרך כלל, כאשר ארגומנט הפונקציה הוא פונקציה. אפשרות מותרת כאשר הפונקציה מחזירה פונקציה. JavaScript לוקח את זה די רגוע.

זהו מנגנון טוב, אבל מסובך מבחינת יישום. מבחינה טכנית, הכל מותר, מבחינה סמנטית להבטיח את ההיגיון של העברת "פונקציונליות" אפשרי רק עבור מפתח מוסמך.

פונקציית JavaScript כדי לתפקד

כאשר בפונקציה JavaScript פונקציה בכל מקוםהלך, אבל כאשר פונקציה spawns פונקציה, וכי עוד אחד, זה די קשה כדי לעקוב אחר ההיגיון. למעשה, השאלה היא לא ליישם את הכישורים, השאלה היא להשיג תוצאה בטוחה ונכונה.

הטיפול של היזם ברור ופשוט. יש משימה, אתה צריך פתרון, לא שגיאה כמו "שגיאה JavaScript המבצע הוא לא מאובטח", מסך נקי או להפסיק את מנוע הדפדפן כולו.

אם הטענה היא פונקציה, אם כןהיזם עובר משתנה עם מאפיינים מיוחדים, כלומר, הוא לא מספר, לא מחרוזת, לא אובייקט. אבל השימוש בוויכוח כזה יכול להוביל לכך שמשתנים חיצוניים ישתנו ותוצאת ביצוע הפונקציה תהיה. בהתאם לעובדה כי שינויים נאותים יועברו.

ביצוע הקוד שנוצר

ליישם את ביצוע הקוד שנוצר בתהליך של קוד אחר, זה אפשרי באמצעות "הערכה". זה לא נחשב פתרון מעולה, אבל אתה יכול לעתים קרובות לא לסבך את הקוד עם פונקציות מיותרות, אבל להגביל את עצמך את היווצרות בנאלי של שורה של קוד JavaScript פשוט לבצע אותו.

הפונקציה מחזירה פונקציית JavaScript

בדוגמה זו, מחרוזת ההוספה נוצרתמתנהג קצת מידע. מספר הדיווה ותוכן המידע שונים בתפקידים שונים, ולכן פתרון שכזה במצב זה מובטח לא לספק את המצב "שגיאת javascript המבצע לא מאובטח", אבל זה יהיה אמין לתת את האפקט הרצוי.

הדוגמה של המחבר היא לא תמונה

הניואנסים של הפרדיגמה של JavaScript "פונקציה"

אם יש הזדמנות לעשות בלי חריגות, עדיף להשתמש בו. כל האפשרויות הרשומות הן טובות. כמובן, במקרים רבים זהו הפתרון היחיד.

הדוגמה הקלאסית של רקורסיה: מחשוב פקטוריאלי. זה די קשה לכתוב אלגוריתם זה יהיה לולאה, אבל זה מאוד פשוט ללכת מעבר לגבולות הערך. Factorial גדל מהר מדי.

עם זאת, הן recursion ו פונקציה כי מכנה פונקציה אחרת שיכולה לבצע התקשרות חוקית הם הנורמה של הדברים.

לדוגמה, טבלה רגילה. ייתכן שיש טבלאות אחרות בטבלה. קינון לא יכול להיות מוגבל. כתיבת סדרה של פונקציות עבור כל שולחן הוא יותר מדי מותרות.

יש דוגמאות רבות כאלה, והכולאלה יהיו משימות אמיתיות ודחופות, בכלל לא מתחום התכנות. לכן הבעיה טמונה דווקא בעובדה שאתה לא יכול לעשות בלי חריגות, מערכת שנוצר של פונקציות, ליתר דיוק, הבאגים שלה ועבודה אמינה לאחר מכן הופך את הדאגה לא של JavaScript, אבל של היזם.

</ p>>
קרא עוד: