[英]Why doesn't const App = App || {}; work but using var does?
過去我用過
var App = App || {};
在分別加載到瀏覽器中的各種js腳本中分配或實例化公共App對象。
但是,使用let
和const
而不是var
會引發引用錯誤:
const App = App || {}; // or let App = App || {};
Uncaught ReferenceError: App is not defined
at <anonymous>:1:11
這里發生了什么? 如果我想繼續使用這種模式,我是否必須堅持使用var
?
這是因為當您使用let
或常量聲明變量時,變量在初始化之前處於時間死區 。
換句話說,嘗試let foo = foo
會拋出錯誤,因為foo
仍處於暫時死區,並且無法使用。 const
。
還需要注意的是定義的變量蒙山let
或定義的常數const
不能與其他變量相同的范圍內分享它的名字空間,無論是let
, const
,或var
。
當javascript引擎看到語句時, var App = App || {}
var App = App || {}
,它將語句分解如下:
var App;
App = App || {};
由於可變提升, var App = App || {}
var App = App || {}
分為兩部分。
var App
App = App || {}
App = App || {}
另一方面, let
和const
聲明不涉及變量提升。 因此, ReferenceError
,因為還沒有名為App的變量。
var
的行為與let
或const
不同。
在var
情況下,JS引擎首先創建變量定義,為它們分配內存空間並使用undefined
值初始化它們。 只有這樣它才能逐行開始執行代碼。
在let
或const
情況下,它僅在聲明實際發生時(並且僅在沒有立即賦值時)將其初始化為undefined
。
在您的示例中,變量App
仍處於Temporal Dead Zone中,並且在該點嘗試訪問它會導致參考錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.