關於javascript函數中變量的做用域

今天讀《JavaScript語言精粹》一書中關於做用域部分時,被一句話搞迷糊了。javascript

原文是:"Javascript確實有函數做用域。那意味着定義在函數中的參數與變量在函數外部是不可見的,並且在一個函數中的任何位置定義的變量在該函數中的任何地方均可見。"java

當時理解的這句話就是:若是在函數內定義一個變量,那麼在函數外部不能直接使用這個變量(除非外部已經有個同名的變量),不然會報not defined錯誤;在函數內不管在什麼位置(可能在定義語句以前,也可能在以後)都能使用這個變量(包括其值)。ide

但通過一個小的測試用例後,發現本身理解錯了,例子代碼以下:函數

  
  
  
  
  1. function func(){ 
  2.     alert(a); 
  3.     var a = 5; 
  4. alert(a);
  5. func(); 

結果會依次打出:"undefined","5"測試

「可見」只是說明那個變量是存在的,至關於只是作了個「聲明」,「值」只有在定義以後或者是進行賦值操做以後才能獲取的到。spa

第一個alert語句只是知道有個叫a的變量被定義了,但還沒賦值ip

第二個alert語句打的是已經定義並賦過值的a作用域

哎,可能本身的理解能力有問題,但想真正理解javascript是須要下很大一番功夫的it

相關文章
相關標籤/搜索