這篇文章帶給大家的內容是關於js的預解釋是什麼意思?淺析js中預先解釋的意義,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
之前常會聽到預解釋,預解釋,那麼預解釋到底是什麼?今天就來淺談一下下。
預解釋也是我們平常說的變數提聲,在目前作用域中js程式碼執行之前,瀏覽器首先會預設的把所有的帶var和function的進行提前的宣告或定義,這個就可以叫做預解釋。
那什麼叫做聲明,什麼又叫做定義喃?
宣告:例如
var test
那這個就是在告訴瀏覽器我們在全域作用域中宣告了一個叫test的變數
定義:例如
test=2
給我們宣告的變數進行賦值
那對於有var 和function關鍵字的,在預解釋中,他們也是不一樣的。帶var 的在預解釋中只是提前的聲明,而function在預解釋中既要聲明,還要定義,這也就是為什麼上面我們說“ 提前聲明或定義”
舉個範例
var test = 2 var obj = {"name":"代码"} function foo (val) { var test2 = val console.log(test2) }
以上程式碼在全域作用域中從上往下執行的時候預先解釋,首先宣告一個test,宣告一個obj,再宣告和定義一個foo。那麼在foo裡面的 var test2在全域作用域下會預先解釋嗎?當然是不行的, 上面我們也說過了「 在目前作用域中js執行 」test2在foo的作用域中,只有當foo執行的時候才會預解釋。所以預解釋是只發生在目前作用域下的,只有函數執行的時候函數中的才會預先解釋。
所以我們可能出去面試的時候就會遇到一些這樣的問題
console.log(test ) foo(5) var test = 2 console.log(test ) var obj = {"name":"代码"} function foo (val) { var test2 = val console.log(test2) }
那麼印出來的內容是什麼喃?
console.log(test )//undefined foo(5)//5 var test = 2 console.log(test )//2 var obj = {"name":"代码"} function foo (val) { var test2 = val console.log(test2) }
因為剛開始的時候只是對test做了聲明,但是沒有對它進行定義,所以第一次console是undefind,但是後來到了第二次console的時候,已經把2賦值給了test,所以第二個console是有值的。而foo是function,在預解釋的時候,既要聲明又要定義,所以foo(5)是有值的。
相關推薦:
扒一扒JavaScript 預解釋_javascript技巧
以上是js的預解釋是什麼意思?淺析js中預先解釋的涵義的詳細內容。更多資訊請關注PHP中文網其他相關文章!