宣告(declare):var a/
function sum (預設值undefined)
定義(defined): a=12 (定義其實就是賦值操作) [變數提公升階段] =>帶"var" 的只宣告未定義 => 帶"function" 的宣告 和賦值都完成了。 變數提公升只發生在當前作用域(例如:開始載入頁面的時候,只對全域性作用域下的進行提公升, 因為此時函式中儲存的都是字串而已) => 在全域性作用域下宣告的函式 或者變數是"全域性變數",同理,在私有作用域下宣告的變數是「私有變數」 [帶var/function 的才是宣告]
瀏覽器很懶, 做過的事情不會重複執行第二遍,也就是當**執行遇到建立函式這部分**後,直接的跳過即可, (因為提公升階段就已經完成函式的賦值操作了。)
細節點在當前作用域下,不管條件是否成立 都要進行變數提公升 帶var 的還是只宣告 帶function的在老版本瀏覽器渲染機制下,宣告+定義都處理,但是為了迎合es6中的塊級作用域,新版本瀏覽器對於函式 (在條件判斷中的函式),不管條件是否成立,都只是先宣告,沒有定義,類似於var。
js提公升機制(hoisting)
這是我申請寫的第一篇文章,想把這兩天學習的關於js的變數和函式提公升機制 hoisting 記錄下來。從網上看到這麼一段 varc 2 functionc a 10 這可不是對外面的全域性變數a定義哦 console.log a 10 區域性變數 vara 11 console.log a 11 區...
關於js的各種變數提公升機制
js中,傳統宣告變數是var function es6中是let const import。今天說一下前四種的異同。let 和 const letconst都是宣告乙個變數,但是const宣告的變數不允許指標重新指向,且const宣告的時候必須賦值,否則會報錯。變數賦值本質上就是乙個指標指向的過程。...
js變數提公升機制下重名的問題
帶var 和 function 關鍵字宣告相同的名字,這也算重名了 其實是乙個fn,只是儲存值得型別不一樣 fn 4 function fn fn 4 function fn fn 4 var fn 100 帶var 的在提公升階段只把宣告處理了,賦值操作沒有處理,所以在 執行的時候需要完成賦值 f...