今天看let關鍵字時,去查了下var的提公升會導致的問題,發現了乙個很有趣的例子
在函式作用域或全域性作用域中通過var宣告的變數,無論實際上在**宣告的,都會被當成在當前作用域頂部宣告的變數,這就是是我們常說的提公升(hoisting)機制
var v = 1;
(function() )();
上述**的執行結果為undefined,原因是塊級作用域中的v變數的提公升,等價於如下**:
var v = 1;
(function() )();
可以看出v編譯在塊級作用域中提公升到最前面了,所以才導致輸出undefined。
順便一說,let宣告的變數不會與全域性作用域掛鉤
js變數提公升機制
宣告 declare var a function sum 預設值undefined 定義 defined a 12 定義其實就是賦值操作 變數提公升階段 帶 var 的只宣告未定義 帶 function 的宣告 和賦值都完成了。變數提公升只發生在當前作用域 例如 開始載入頁面的時候,只對全域性作用...
關於js的各種變數提公升機制
js中,傳統宣告變數是var function es6中是let const import。今天說一下前四種的異同。let 和 const letconst都是宣告乙個變數,但是const宣告的變數不允許指標重新指向,且const宣告的時候必須賦值,否則會報錯。變數賦值本質上就是乙個指標指向的過程。...
js提公升機制(hoisting)
這是我申請寫的第一篇文章,想把這兩天學習的關於js的變數和函式提公升機制 hoisting 記錄下來。從網上看到這麼一段 varc 2 functionc a 10 這可不是對外面的全域性變數a定義哦 console.log a 10 區域性變數 vara 11 console.log a 11 區...