今天讀《JavaScript語言精粹》一書中關於作用域部分時,被一句話搞迷糊了。
原文是:"Javascript確實有函數作用域。那意味着定義在函數中的參數與變量在函數外部是不可見的,而且在一個函數中的任何位置定義的變量在該函數中的任何地方都可見。"
當時理解的這句話就是:如果在函數內定義一個變量,那麼在函數外部不能直接使用這個變量(除非外部已經有個同名的變量),否則會報not defined錯誤;在函數內無論在什麼位置(可能在定義語句之前,也可能在之後)都能使用這個變量(包括其值)。
但經過一個小的測試用例後,發現自己理解錯了,例子代碼如下:
- function func(){
- alert(a);
- var a = 5;
- alert(a);
- }
- func();
結果會依次打出:"undefined","5"
“可見”只是說明那個變量是存在的,相當於只是做了個“聲明”,“值”只有在定義之後或者是進行賦值操作之後才能獲取的到。
第一個alert語句只是知道有個叫a的變量被定義了,但還沒賦值
第二個alert語句打的是已經定義並賦過值的a
哎,可能自己的理解能力有問題,但想真正理解javascript是需要下很大一番功夫的