正在學習ES6的內容,看的是阮一峰老師出的書,看到變量聲明那里,關于暫時性死區的內容。這里有一個例子:vartmp=123;if(true){tmp='abc';//ReferenceError:tmpisnotdefinedlettmp;}看完對這個例子的解析,還是沒有解決我的疑問。我不把let的聲明放到代碼塊前面。我是這么看這個例子的:首先,因為代碼中沒有函數,所以聲明了一個全局的變量tmp并且初始化一個值123。然后進入條件語句之后,再給這個全局變量重新賦值,接著后面聲明了一個只在花括號內有效的和全局變量同名的一個變量。最后報錯。tmp沒有定義,可是明明已經全局聲明過tmp了,所以這么報錯是因為和局部的塊作用域的tmp沖突了。然后改下代碼,換了let變量名:vartmp=123;if(true){tmp='abc';lettemp;}//輸出abc這來自全局tmp沒有報錯,并且輸出abc,塊作用域的temp不受影響結論是,代碼塊內不能聲明和全局變量同名的變量?這顯然不應該是這樣的,有點理不清了。
有大佬遇到過這個問題嗎:es6關于暫時性死區的疑問
幕布斯6054654
2019-08-21 18:27:02