在JavaScript中,沒有區塊級作用域的概念。在區塊級語句中定義的變量,實際上是在包含函數中創建的,而不是在語句中創建的,可以將變量聲明放在函數體頂部,而不是將聲明靠近放在使用變量之處。
本教學操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。
Javascript沒有區塊級作用域的概念。這意味著在區塊級語句中定義的變量,實際上是在包含函數中而非語句中建立的。
程式碼段1:
var scope="global"; function f(){ console.log(scope); var scope="local" console.log(scope); } f();
會輸出什麼?
答案:undefined local
程式碼段2:
var scope="global"; function f(){ var scope; console.log(scope); scope="local" console.log(scope); } f();
又會輸出什麼?
答案:undefined local
程式碼段3:
var scope="global"; function f(){ console.log(scope); } f();
又會輸出什麼?
答案:global
透過以上三個例子,以下解釋「JavaScript沒有區塊級作用域,有函數作用域」這句話。
在JavaScript中,由於函數作用域的特性,程式碼段1和程式碼段2是等價的,局部變數在整個函數體是中是有定義的,
也就是說,程式碼段1在函數體內的局部變數scope覆蓋了同名全域變量,並且只有在程式執行到var 語句的時候,局部變數scope才會被真正的
賦值。因此,上述過程等價於:將函數內的變數宣告「提前」至函數體頂部,同時變數初始化留在原來的位置:也就是程式碼段2。
在具有區塊級作用域的程式語言中,在狹小的作用域裡讓變數宣告和使用變數的程式碼盡可能靠近彼此,通常來講,這是一個非常不錯的程式設計
習慣。由於JavaScript沒有區塊級作用域,因此,一些程式設計師刻意將變數宣告放在函數體頂部,而不是將宣告靠近放在使用變數之處。這種做法
使得他們的原始碼非常清楚地放映了知識的變數作用域。
相關推薦:javascript學習教學
以上是javascript有沒有區塊級作用域的詳細內容。更多資訊請關注PHP中文網其他相關文章!