因爲js中只用兩種作用域,也就對應這兩種類型的變量。
1:全局變量 -> 在全局範圍內都是可以訪問的。
2:局部變量 -> 只能在當前作用域進行訪問。
在js中有一種特殊的情況,在函數作用域內聲明的變量,沒有用var字,那麼該變量是一個全局變量。
再看一個例子:
總結:
1:子集作用域內是可以訪問父級作用域(或上一級)的變量,但是父級作用域是不能訪問到子集作用域內的變量。
2:在訪問某一個變量的時候,先在當前作用域查找是否有該變量,就近原則,如果沒有,往上一級查找(父級),如果還沒有,接着往上查找,直到全局作用域,如果還沒有,返回的就是一個undefined。
3:沒有使用var聲明的變量是全局變量,不推薦使用。
4:變量超出作用域之後就會被銷燬,全局變量在關閉頁面或關閉瀏覽器時纔會被銷燬,所以儘量少使用全局變量,會佔內存空間的。
----------------------------------------------------------------------
補充:什麼時候變量的值會是undefined?
有兩種情況:
1:沒有該變量,也就是沒有定義該變量
2:定義了該變量,但是沒有給該變量賦值。