繼續介紹關於 JavaScript 中的 腳本區 script block....
在前幾篇文章,陸續說明 JavaScript function、variable 的 script block
本篇算是進入這個系列主題的重點,直接看程式碼與說明,如下:
function f1()
{
alert('outside');
}
console.log('test 1 - ' + f1);
;(function(){
console.log('test 2 - ' + f1);
f1 = function()
{
alert('b_var');
}
console.log('test 3 - ' + f1);
function f1()
{
alert('inside');
}
console.log('test 4 - ' + f1);
})();
console.log('test 5 - ' + f1);
test 1 - 結果是 outside -> 無疑
test 2 - 此 f1 感覺會讀取 window.f1 , 但是在 line 19~22 有宣告一個function f1
因此 line 10 的 f1 會優先讀取 巢狀內的 f1 (巢狀內沒有f1才會很上層提取) , 因此目前 f1 為 inside
test 3 - 在 line 12~15 有對 f1 進行修改,所以,此處的 f1 為 b_var
test 4 - 雖然在 line 19~22 有一個 function f1 , 但是在 line 24 的 f1 並不影響
因為 line 19~22 是在 巢狀一開始(line 8)就被宣告
test 5 - 因為 巢狀內都是使用內部的 f1 , 並無影響外部的.f1 , 因此結果還是 outside
var f1 = function(){}
與
function f1(){}
除了在 parse-time 與 run-time 的不同
在 script block 的宣告時間點也是有所差異。