שאלה ב javascript

  • פותח הנושא omryk
  • פורסם בתאריך

omryk

New member
שאלה ב javascript

function foo() {
var a = 10;

function bar() {
a *= 2 ;
return a;
}

return bar;
}

var baz = foo();
document.writeln(baz);
document.writeln(baz()); // write 20.
document.writeln(baz()); // write 40.
document.writeln(baz()); // write 80.

var blat = foo();
document.writeln(blat()); // returns 20


לא הבנתי למה כל פעם שאני מפעיל את הפונקתיה foo () בעזרת המשתנה baz ערך a נשמר מהקריאה הקודמת..
תודה
 

selalerer

New member
reference

ב-Javascript כל פונקציה היא למעשה אובייקט. כשאתה עושה שימוש במשתנה שאינו ב-scope של הפונקציה, נשמר על האובייקט reference למשתנה הזה (במקרה הזה a). אז כשאתה משתמש באופטור () של האובייקט הזה, הוא משתמש ב-reference הזה שוב ושוב.

אפילו שה-scope המקורי שבוא הוכרז a כבר הסתיים, עדיין קיים אליו reference מהאובייקט bar (ש-baz מצביע אליו), אז הוא נשאר חי.
 
למעלה