ארכז כאן שאלות שיכולות להישאל במבחני עבודה או סתם דברים טריקים שמצאתי.
מה יודפס למסך בהרצת הקוד הבא:
if(val == 1) {
console.log("val 1");
} else {
console.log("val not 1");
}
var val = 2; // val not 1
המשך לשאלה:
ואם הייתי משנה בסוף ל
var val = 1;
מה היתה התוצאה
תשובה:
למסך יודפס val not 1
מכיוון שברגע שמכריזים על משתנה עם var אז הוא נדחף לראש הסקופ שבו הוא מוגדר הדבר
הזה מכונה hoisting והוא מאפשר לנו להשתמש במשתנים לפני שהגדרנו אותם.
סעיף ב: גם אם היינו משנים ל 1 זה היה עדיין מדפיס val not 1 בגלל שהדפדפן בתהליך הקומפליזציה, מפרק את ההכרזה ל 2
כלומר הוא מגדיר את המשתנה בתחילת התוכנית אבל לא שם את התוצאה ( 1 במקרה שלנו)
זה נראה כך :
var val;
if(val == 1) {
console.log("val 1");
} else {
console.log("val not 1");
}
val = 1;
שאלה על closure :
מה יודפס למסך בכל פעם.
var i = 0;
function inc() {
return i++;
}
console.log(inc(), inc(), inc(), i); // 0, 1, 2, 3
הסבר: פעם ראשונה קוראים לפונקציה inc ואומרים לה להחזיר i ולאחר מכן להוסיף לו 1 .
אז בסקופ שלו אין לו i הוא מחפש את ה i למעלה ומוצא שהוא 0 ומחזיר 0 ומוסיף לו 1.
אותו דבר בפעם השניה מחזיר 1 ואחר כך מעדכן את i ל 2
כנל בפעם השלישית מחזיר 2 ומעלה את i ל 3
בפעם הרביעית מחזירים רק את i אז הוא יחזיר 3 ולא מעלים אותו. אם נמשיך להחזיר רק את i יוחזר 3
לתופעה הזאת קוראים closure שאפילו שאין i שמוגדר בפונקציה הוא יחפש אותו בסקופ למעלה.
דברים מוזרים ב javascript :
מה יהיה הפלט לדברים הבאים :
null > -1 התשובה היא : true
-1 < {} התשובה: false
-1 > {} == false
-1 < {} == false
זה הבסיס לאחת ההרצאות המפורסמות ברשת חובה לראות – בהתחלה הוא מדבר על רובי ואחר כך ממשיך ל Js
https://www.destroyallsoftware.com/talks/wat
מה התוצאה של
x = x++ + ++x
כאשר נניח ש X = 1
התשובה היא : 4
יש גם את אתר javabat יש בו מלא חידות קטנות לפי רמות.
והוא בודק את הפיתרונות עם אינפוטים שונים.
מה ההבדל בין הפקודות:
(strpos('ffff:hhhh','ffff') !== false)
BS
(strpos('ffff:hhhh','ffff') === true)
תשובה:
על פניו נראה שהפקודות זהות והתחביר שלהם זהה, אבל הפקודה השניה פחות נכונה, במידה והסטרינג התואם נמצא בהתחלה במיקום 0 כמו בדוגמה אז הפקודה השניה תחזיר שקר כי זה 0 ולכן במקרה כזה עדיף להשתמש בפקודה השניה, אגב הפקודה הזאת משמשת למצא האם יש התאמה של מילה בסטרינג.