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);
//想要處理一些物件,但是又不確定以何種形式來處理,則完全可以將“處理方式”作為一個抽象的粒度來進行包裝(即函式)。