分享

function , script block in JavaScript (函式,腳本區) 3

 ipilipala 2016-11-02

繼續介紹關於 JavaScript 中的 腳本區 script block....
上上篇文章:http://ithelp./question/10127299

上篇文章:http://ithelp./question/10127586

在上上篇文章,提到 parse-time 與 run-time 的不同

在上篇文章,也說明了,在呼叫變數、函式時,如果在該 script block (腳本區)

呼叫不到時,會向上一層做查詢

本篇文章再繼續延伸進行說明,程式碼&說明如下:

function f1()
{
	alert('outside');
}

console.log('test 1 - ' + f1);

;(function(){

console.log('test 2 - ' + f1);

var f1 = function()
{
	alert('var');
}

console.log('test 3 - ' + f1);
	
})();

console.log('test 4 - ' + f1);

(這一次我們不直接 alert 出結果,而是將資料直接 console 出來檢視)

test 1 - function f1()
{
	alert('outside');
} 
test 2 - undefined 
test 3 - function ()
{
	alert('var');
} 
test 4 - function f1()
{
	alert('outside');
} 

test 1 - 結果是 outside -> 無疑

test 2 - 因為在 line 12 有一個 RunTime 才會宣告的 f1 (巢狀內變數),
因此在 test 2 的 f1 並不會去向上讀取 window.f1
程式碼中在 test 2 的 f1 為 undefined.

test 3 - 因 line 12 ~ 15 , 此時巢狀內的 f1 變數已經有資料 , 為 var

test 4 - 因為巢狀內使用的是 區域變數 ( block var ) 所以並不影響 window.f1 , 所以,結果還是 outside

PS :
在 巢狀(block)內的變數 , 通常在 巢狀一開始,就會被宣告(但並未會使用or給值)
所以,程式在叫用的時候,只會出現 undefind. 但程式繼續執行。
(試圖讀取一個 xxx 從未使用的變數) , 將 line 10 修改為 console.log('test 2 - ' + xxx);
因為xxx連宣告的動作都沒有,則會出現 Uncaught ReferenceError: xxx is not defined 錯誤(而此錯誤會導致程式中斷)


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多