物件導向Javascript - 封裝
可以把Javascript看成用 execution context 為單位組成的結構,javascript在執行的時候,會在不同的 execution context 間切換。 execution context 有三種: Global , Function 以及 Eval 。Javascript變數解析的規則叫做 scope chain ,每次進入不同的 execution context ,執行環境就會為它建立一個 scope chain ,結構類似一個堆疊,目前正在執行的 execution context 放在堆疊的最上面,然後依次是其他的 execution context 。舉例來說,當函數a裡面定義了另一個函數b,那在執行函數b裡面的程式時, scope chain 會像是:b->a->Global,Javascript會依照這個順序尋找變數、函數等的定義。(還是有點像天書)>
function test() {
global1 = 1;
var private1 = 2;
}
function check() {
alert(global1);
}
test();
check();
用 scope chain 規則來解釋:當執行test()時,碰到了global1這個東西,在test函數裡面並沒有定義,所以執行環境到 Global 找,也沒找到,然後執行環境就在 Global 定義了一個變數,名稱叫做global1,然後把1這個值assign給他。之後執行check(),碰到 global1這個東西,在check函數裡面也沒定義,所以執行環境跑到 scope chain 中的下一個 execution context ,也就是 Global 中找,然後找到了。所以alert()就會秀出1。
沒有留言:
張貼留言