שאלה קטנה בJavascript

Netta

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

Netta

משתמש סופר מקצוען
מנהל קבוצה
הנדסת תוכנה
קוד:
<html>
        <button id="btn1" onclick="showGame()">Start Game</button>
        <button type="button" id="button" onclick="checkNums()">Go!</button>
</html>

<script>
        var arr = new Array()
        function showGame() {
          arr = [1,2,3,4]
        }
  
        function checkNums (){
    console.log(arr[0])
            if (arr[0] == 3)
                {var c = false}
        }
</script>

@yitzhak123
זה הרעיון.
שיניתי קצת את הקוד הפנימי כי הוא לא רלוונטי.
 
נערך לאחרונה ב:

yitzhak123

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

Netta

משתמש סופר מקצוען
מנהל קבוצה
הנדסת תוכנה
הקוד שהבאת עובד מעולה, תביא קוד עם שגיאה
(חוץ מזה שכתוב
arr[0] = 3
במקום
arr[0] == 3
)
אז זהו, כשאני עושה console.log() לarr בפונקציה השניה, הוא כותב undefined כמה פעמים.
 

Netta

משתמש סופר מקצוען
מנהל קבוצה
הנדסת תוכנה
המשתנה c אינו נגיש מחוץ לפונקציה שיצרה אותו, כך שאם ניסית לגשת עליו לאחר ההקשה על הכפתור תקבלי שגיאה, אלא אם כן הצהרת עליו לפני שאז מיותר המילה var.
ועוד דבר כמו שכבר נכתב מעלי השוואה נעשית עם === או ==, לא עם = שבה עושים הקצאה.
תודה, תיקנתי את ההשוואה.
ואני לא צריכה גישה למשתנה c
ברגע שאני רוצה לראות את הערכים של arr ע"י console.log בפונקציה השניה, הוא כותב לי שהם undefined
(הוספתי את זה בקוד)
 

קרן שמש

משתמש סופר מקצוען
קוד:
<html>
        <button id="btn1" onclick="showGame()">Start Game</button>
        <button type="button" id="button" onclick="checkNums()">Go!</button>
</html>

<script>
        var arr = new Array()
        function showGame() {
          arr = [1,2,3,4]
        }
 
        function checkNums (){
    console.log(arr[0])
            if (arr[0] == 3)
                {var c = false}
        }
</script>

@yitzhak123
זה הרעיון.
שיניתי קצת את הקוד הפנימי כי הוא לא רלוונטי.
הקוד הזה תקין.
יש פה דברים מיותרים. לדוגמה לתגית button את לא צריכה להוסיף גם type=button
אפשר להגדיר רק arr בלי לעשות לו new array()
 

yitzhak123

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

מיכל.

משתמש סופר מקצוען
איור וציור מקצועי
באיזה סביבה את כותבת את זה?
יכול להיות שהכפתור עושה SUBMIT ומרענן את הדף?
תנסי להחליף את הBUTTON לINPUT מסוג BUTTON.
 

תא חזי

משתמש סופר מקצוען
עיצוב גרפי
עימוד ספרים
עריכה תורנית
@Netta
לכאו' להוסיף RETURN בפונקציות:
HTML:
<html>
        <button id="btn1" onclick="showGame()">Start Game</button>
        <button type="button" id="button" onclick="checkNums()">Go!</button>
</html>

<script>
        var arr = new Array()
        function showGame() {
          return arr = [1,2,3,4]
        }
 
        function checkNums (){
            console.log(arr[0])
            if (arr[0] == 3){
                var c = false
                return c
            }
        }
</script>
 

@shaye

משתמש מקצוען
D I G I T A L
יש פה דברים מיותרים. לדוגמה לתגית button את לא צריכה להוסיף גם type=button
יכול להיות שהכפתור עושה SUBMIT ומרענן את הדף?
תנסי להחליף את הBUTTON לINPUT מסוג BUTTON.
אם מצהירים בכפתור type=button, הכפתור אינו מבצע sumbit, וזאת גם הסיבה שהיא אינה מיותרת.
הוא מתייחס למערך כריק.
()checkNums יחזיר undefined רק אם קוראים אותה לפני showGame(), מכיון שעד אז arr[0] עדיין לא מוגדר.
 

Netta

משתמש סופר מקצוען
מנהל קבוצה
הנדסת תוכנה
אצלי זה עובד, רק כשאני קורא לפונקציה השניה לפני הראשונה זה מחזיר undefined, יתכן שזה הבעיה?
באיזה סביבה את כותבת את זה?
יכול להיות שהכפתור עושה SUBMIT ומרענן את הדף?
תנסי להחליף את הBUTTON לINPUT מסוג BUTTON.
אם מצהירים בכפתור type=button, הכפתור אינו מבצע sumbit, וזאת גם הסיבה שהיא אינה מיותרת.

()checkNums יחזיר undefined רק אם קוראים אותה לפני showGame(), מכיון שעד אז arr[0] עדיין לא מוגדר.

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

תנסי להכניס את הערך מתוך הarr לalert במקום הקונסלוג לוג
בקוד האמיתי שלי אני צריכה לעשות דברים נוספים עם המערך הזה... וזה שהוא לא מזוהה משבש לי את התוצאות.
לכאו' להוסיף RETURN בפונקציות:
ולאן הוא מחזיר לי אותו? איך אני מקבלת אותו בפונקציה השניה?
 

devMode

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

תא חזי

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

devMode

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

רחל1

משתמש מקצוען
D I G I T A L
בקוד האמיתי שלי אני צריכה לעשות דברים נוספים עם המערך הזה... וזה שהוא לא מזוהה משבש לי את התוצאות.

זה מה שכתבתי, שנראה לי שהשגיאה היא על הcnosole.log ולא על זיהוי המערך. תנסי לבדוק את התוכן בalert ותראי אם מזהה את המשתנה.
 

devMode

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

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קח

א שִׁיר מִזְמוֹר לְדָוִד:ב נָכוֹן לִבִּי אֱלֹהִים אָשִׁירָה וַאֲזַמְּרָה אַף כְּבוֹדִי:ג עוּרָה הַנֵּבֶל וְכִנּוֹר אָעִירָה שָּׁחַר:ד אוֹדְךָ בָעַמִּים יי וַאֲזַמֶּרְךָ בַּלְאֻמִּים:ה כִּי גָדוֹל מֵעַל שָׁמַיִם חַסְדֶּךָ וְעַד שְׁחָקִים אֲמִתֶּךָ:ו רוּמָה עַל שָׁמַיִם אֱלֹהִים וְעַל כָּל הָאָרֶץ כְּבוֹדֶךָ:ז לְמַעַן יֵחָלְצוּן יְדִידֶיךָ הוֹשִׁיעָה יְמִינְךָ וַעֲנֵנִי:ח אֱלֹהִים דִּבֶּר בְּקָדְשׁוֹ אֶעְלֹזָה אֲחַלְּקָה שְׁכֶם וְעֵמֶק סֻכּוֹת אֲמַדֵּד:ט לִי גִלְעָד לִי מְנַשֶּׁה וְאֶפְרַיִם מָעוֹז רֹאשִׁי יְהוּדָה מְחֹקְקִי:י מוֹאָב סִיר רַחְצִי עַל אֱדוֹם אַשְׁלִיךְ נַעֲלִי עֲלֵי פְלֶשֶׁת אֶתְרוֹעָע:יא מִי יֹבִלֵנִי עִיר מִבְצָר מִי נָחַנִי עַד אֱדוֹם:יב הֲלֹא אֱלֹהִים זְנַחְתָּנוּ וְלֹא תֵצֵא אֱלֹהִים בְּצִבְאֹתֵינוּ:יג הָבָה לָּנוּ עֶזְרָת מִצָּר וְשָׁוְא תְּשׁוּעַת אָדָם:יד בֵּאלֹהִים נַעֲשֶׂה חָיִל וְהוּא יָבוּס צָרֵינוּ:
נקרא  11  פעמים

אתגר AI

מלכות ה' • אתגר 119

לוח מודעות

למעלה