官术网_书友最值得收藏!

2.1.4 變量的作用域

同其他編程語言一樣,JavaScript的變量同樣,擁有作用域,如果在作用域外使用變量會獲取不到變量,以至于產生錯誤。同樣,JavaScript的變量也分為全局變量和局部變量兩種類型。

1)全局變量:在函數外定義的變量,可以在所有的HTML文件和腳本中使用,例如:

這段代碼可以在控制臺輸出“a+b、a、b”,輸出如圖2.3所示。

圖2.3 樣例輸出2.3

2)局部變量:在函數內聲明的變量,只能在局部范圍(函數內部)使用,例如:

這段代碼可以在控制臺輸出“a+b”但是輸出“a”“b”時會報錯,輸出如圖2.4所示。

圖2.4 樣例輸出2.4

3)不加var或者let聲明的變量:在2.1.3節中介紹過,不加var或者let聲明的變量實際上是給Window對象添加了一個不可配置的屬性,既然它是整個瀏覽器窗口的屬性,那它一定是可以作用于整個頁面的,因此即使不在函數作用域中用var關鍵字聲明,該變量也是全局變量,例如:

這段代碼可以成功輸出“a+b”“a”“b”,輸出如圖2.5所示。

圖2.5 樣例輸出2.5

4)代碼塊中使用var關鍵字定義的變量:代碼塊一般指的是花括號中包含的語句。最常見的代碼塊是if和for語句中的語句塊,而這些語句塊中的變量指的是在這些代碼塊中用var關鍵字定義的變量,這些變量是可以在代碼塊外的作用域內起作用的,例如:

這段代碼能夠正確輸出“i”和“sum”的值,輸出如圖2.6所示。

圖2.6 樣例輸出2.6

值得注意的是,代碼塊中的函數只能在其代碼塊所在的作用域內使用。如果代碼塊位于函數中,則聲明的變量為局部變量,只能在本函數中使用。而用let聲明的函數只能在代碼塊中生效,在代碼塊以外是不能生效的。

5)var和let的區別:let關鍵字是在ES6的JavaScript中新規定的關鍵字,其目的是解決var關鍵字的一些缺陷,可以認為是更規范、更先進的var。let縮小了var的作用域,用let聲明的變量只能在代碼塊中生效,在代碼塊以外的范圍是不能生效的,否則使用時會報錯。

輸出如圖2.7所示。

圖2.7 樣例輸出2.7

用let定義的關鍵字在作用域外是不能被調用的,否則就會報錯。而且用let定義的變量是不存在變量提升現象的,關于變量提升在后面的章節中將會詳細介紹。

主站蜘蛛池模板: 乌兰浩特市| 白朗县| 舞钢市| 大足县| 连州市| 新巴尔虎右旗| 沐川县| 怀安县| 云安县| 湖州市| 岢岚县| 景德镇市| 视频| 莱西市| 会泽县| 大兴区| 瑞昌市| 丰顺县| 林周县| 景东| 鲜城| 宜章县| 铅山县| 黑山县| 格尔木市| 曲阳县| 普定县| 宜兰县| 沅江市| 田林县| 乐陵市| 永平县| 苍南县| 蒲江县| 普安县| 沙田区| 安平县| 棋牌| 习水县| 湖南省| 龙陵县|