typeof運算符是百分之百安全的,永遠不會報錯?

在沒有let之前,typeof運算符是百分之百安全的,永遠不會報錯。

現在這一點不成立了。這樣的設計是爲了讓大家養成良好的編程習慣,變量一定要在聲明之後使用,否則就報錯。

  • 如果一個變量根本沒有被聲明,使用typeof反而不會報錯
typeof undeclared_variable // "undefined"
  • 只要塊級作用域內存在let命令,它所聲明的變量就“綁定”(binding)這個區域,不再受外部的影響。
var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}
  • 這時候他就會報錯了。
  • ES6 明確規定,如果區塊中存在letconst命令,這個區塊對這些命令聲明的變量,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會報錯。
  • 總之,在代碼塊內,使用let命令聲明變量之前,該變量都是不可用的。這在語法上,稱爲“暫時性死區”
  • “暫時性死區”也意味着typeof不再是一個百分之百安全的操作,因此,typeof運行時就會拋出一個ReferenceError錯誤。

在調試JavaScript程序的時候經常遇到兩個錯誤:ReferenceError和TypeError。
1.首先:字面上的意思分別爲引用錯誤和類型錯誤; 
2.作用域:ReferenceError就是在作用域中找不到、TypeError是在作用域中找到了但是 做了它不可能做的事情。​​​​​​​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章