下面這段程式碼執行後是 undefined
<script type="text/javascript">
if (! 'a' in window) {
var a = 123;
}
console.log(a);
</script>
說明 'a' in window
為 true
, 可是 a 在什麼時候宣告的呢?請教大家,謝謝!
我又把程式碼改成:
<script type="text/javascript">
if (! 'a' in window) {
a = 123;
}
console.log(a);
</script>
結果a is not defined
。既然 a
已經聲明,為什麼要報這個錯誤呢?
先說變數提升吧
這段程式碼無論是否進入
if
的程式碼區塊內,a 都是存在的因為在 JavaScript 執行時,所有透過
var
定義的變數以及宣告式函數都會被提升到目前作用域的頂端而透過
var
建立的變數是沒有塊級作用域的,所以會提升到目前函數作用域的頂端在全域作用域定義的變數都是 window 的屬性
所以這段程式碼實際上執行的時候是這樣的順序
定義了
a
,但沒有賦值,自然輸出了undefined
關於其中
.! 'a' in window
其實是先對'a'
字串執行非,得到了false
,window
裡沒有false
,window
裡沒有,沒有進入if 程式碼區塊。
具體可試試以下範例
第二個問題
看懂了上面這個就很簡單了,沒用
if🎜,導致沒有定義 a,報錯。 🎜var
定義(不存在提升),又沒進這段執行沒毛病啊,
! 'a' in window
這個是false,然後a的賦值沒執行,再console不就是undefined麼。如果想讓賦值執行,判斷條件改成
!('a' in window)
就行了。如果還沒明白,請查一下運算子優先列表。
var
宣告的時候會發生變數提升,在編輯階段就把程式碼宣告放在函數或程式碼開頭,所以就變成這個樣子:所以
a in window
是true
。至於
程式碼不包含
var a
。所以不存在變數提升的問題,所以a就沒有宣告過,所以!('a' in window)是true,所以a
是123
https://developer.mozilla.org...
你第一段就理解錯了
!'a' in window🎜 才為true🎜才會執行🎜var a = 123; 才為true🎜才有被賦值的存在🎜'a' in window
你第一段就理解錯了'a' in window
你第一段就理解錯了'a' in window
為false熊貓桑正解啊=_=