2012-10-21 70 views
1

我在Chrome瀏覽器的JavaScript控制檯中使用骨幹日曆應用程序(它可以讓你在日曆上發佈事件),並注意右側(見圖)它有一個顯示本地,關閉和全球範圍的面板。在這個特定的應用程序中,我在EventsView中設置了調試器,Chrome告訴我Event(一個模型)和EventView(一個特定事件的視圖)在Closure範圍內。Chrome瀏覽器JavaScript工具:全球,閉合和本地範圍

我有點理解全球,關閉和本地。全局範圍將是全局名稱空間中的任何內容。本地是當前範圍內的所有變量。你能否以實際的方式解釋事件和事件視圖在閉包範圍內意味着什麼,以及這會如何提高我對應用程序的工作方式的理解......這能爲我提供什麼洞察力?另外,你會注意到,在本地範圍內,'this'被認爲是'孩子'。爲什麼?父母會是什麼?

enter image description here

回答

3

閱讀了這裏關閉:How do JavaScript closures work?

但簡短的回答,假設你暫停在下面6行斷點,變量「全球性」將出現在全局變量部分的調試工具,「封閉」在封閉部分,和「本地」的本地部分:

1 var global = 'foo'; 
2 
3 function bar() { 
4 var closure = 'baz'; 
5 function oof() { 
6  var local = 'rab'; // stopped on a breakpoint on this line 
7 } 
8 } 

調試時,它只是有助於瞭解你需要多少封仰望找到變量定義,它可能適用多少其他上下文,在本地範圍內改變它的後果等。

+1

假設'global'和'local'是有效標識符 –

+0

@glortho所以在我發佈的圖像的上下文中,EventsView是在Event模型和EventView中以某種方式「內部」,就像函數oof在bar中一樣 - 是爲什麼Event模型和EventView被列爲閉包? – BrainLikeADullPencil

+0

實際上,從控制檯中可以推斷出,對#render的調用範圍與定義或引用Event和EventView的範圍相同,並且它們都不在本地引用。 – glortho