主要分享在 JavaScript 程式中,變數有效執行區域
這一次要分享的內容,是這兩天與我同事(Ryan)討論之下,所學習到的心得
剛好藉由這一次鐵人賽,將討論的結果整理成文章
整理文章的過程中,因為技術上的養成還太嫩,所以在定義名詞上有些弱
如果看到文章中覺得怪怪的詞,不用懷疑....你是對的!!(也歡迎你給予指導)
剛接觸JavaScript,如果要寫一個function,我會是這樣子的寫法
function fun1(a,b)
{
// doSomething....
}
後來,看到了有其它的寫法,如下:
var fun1 = function(a,b){
// doSomething....
};
將一個function存到一個變數
剛學JavaScript的時候,覺得這寫法很酷,也很特別
且用法也都一樣 fun1(5,10) 就可以呼叫function.
後來,經過學習,慢慢發現它們之間的不同
在第一種寫法,它在 parse-time 時,就將function宣告好了
而在第二種寫法,它會是在 run-time 時,才會宣告
先以第二種寫法為說明,範例如下:
// 會出現Error
functionOne(); // 先呼叫
var functionOne = function() { // 但function此時才宣告function
}
再回到第一種寫法,範例如下:
functionTwo(); // 因為parse-time已經宣告,所以就可以正常呼叫
function functionTwo() { // 此function在 parse-time時就已經宣告了
}
這就是差在 parse-time 與 run-time 對 function 宣告時機點
再稍為解釋一下關於第二種寫法,就以我個人描述,我會這麼說....
「將一個匿名函式存入fun1變數中」
同事提到,因為 fun1 變數是存入一個匿名函式,所以要加一個分號
就像 var a = 1; 的描述方式是一樣的(我也滿認同這個說法,也剛好將這兩種寫法做個差異)
再補充一個立即函式的寫法(我想,這也算是匿名函式,只是它馬上被執行了)
(function(s){
alert(s);
})('c');
以上,主要是舖陳了我接下來要分享的內容…
期待連假第一天的文章,待續….(幻想有人在等待...)