1. 程式人生 > >JS學習(五)作用域

JS學習(五)作用域

//函式作用域  
//JavaScript 的作用域為詞法作用域,
//所謂詞法作用域是說,其作用域為在定義時(詞法分析時)就確定下來的,而並非在執行時確定  
//作用域鏈是關於作用域的鏈,通常實現為一個連結串列,連結串列的每個項都是一個物件, 
//在全域性作用域中,該鏈中有且只有一個物件,即全域性物件。
//對應的,在一個函式中,作用域鏈上會有兩個物件,第一個(首先被訪問到的)為呼叫物件,第二個為全域性物件。  
  
//JavaScript 中,函式也是一種物件,並非其他任何物件的一部分  
//函式本身是獨立的。可以通過Function 物件上的 call 或者 apply 函式來修改函式
var str = "global";  
function scopeTest(){  
    alert(str);// 由於在區域性作用域是能找到str的定義,而此處使用是在區域性定義之前,所以列印的是undefined  
    var str = "local";  
    alert(str);  
    alert(window.str);// 利用全域性物件,來引用全域性變數  
}  
scopeTest();  
function scopeTest2(){  
    alert(str);//由於在區域性作用域上未能找到定義,而此處是繼續在連結上查詢,最終找到的是全域性變數  
}  
scopeTest2();  

function adPrint2(str, handler){  
print(handler(str));  
}  


//將字串轉換為大寫形式,並返回  
function up(str){  
return str.toUpperCase();  
}  
//將字串轉換為小寫形式,並返回  
function low(str){  
return str.toLowerCase();  
}  
adPrint2("Hello, world", up);  
adPrint2("Hello, world", low);  
//想要處理一些物件,但是又不確定以何種形式來處理,則完全可以將“處理方式”作為一個抽象的粒度來進行包裝(即函式)。