《JavaScript 高級程序設計》第七章函數,關于函數聲明的提升問題,有這樣一個例子:if(condition){ function sayHi(){ alert("Hi!"); }} else { function sayHi(){ alert("Yo!"); } }書上原文說:表面上看,以上代碼表示在condition 為true 時,使用一個sayHi()的定義;否則,就使用另一個定義。實際上,這在ECMAScript 中屬于無效語法,JavaScript 引擎會嘗試修正錯誤,將其轉換為合理的狀態(tài)。但問題是瀏覽器嘗試修正錯誤的做法并不一致。大多數瀏覽器會返回第二個聲明,忽略condition;Firefox 會在condition 為true 時返回第一個聲明。因此這種使用方式很危險,不應該出現在你的代碼中。但是我在 chrome 和 js bin里面測試,把 condition 改成 true,都能 alert“Hi”,并沒有出現書上說的“大多數瀏覽器會返回第二個聲明,忽略condition”的問題,這是為什么呢:if(true){ function sayHi(){ alert("Hi!"); }} else { function sayHi(){ alert("Yo!"); } }sayHi();// Hi!
高程中一個函數聲明例子的困惑
胡子哥哥
2018-11-22 22:14:25