簡體   English   中英

為什么const app = App || {}; 工作但使用var呢?

[英]Why doesn't const App = App || {}; work but using var does?

過去我用過

var App = App || {};

在分別加載到瀏覽器中的各種js腳本中分配或實例化公共App對象。

但是,使用letconst而不是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不能與其他變量相同的范圍內分享它的名字空間,無論是letconst ,或var

當javascript引擎看到語句時, var App = App || {} var App = App || {} ,它將語句分解如下:

var App;
App = App || {};

由於可變提升, var App = App || {} var App = App || {}分為兩部分。

  1. 聲明: var App
  2. 作業: App = App || {} App = App || {}

另一方面, letconst聲明不涉及變量提升。 因此, ReferenceError ,因為還沒有名為App的變量。

var的行為與letconst不同。

var情況下,JS引擎首先創建變量定義,為它們分配內存空間並使用undefined值初始化它們。 只有這樣它才能逐行開始執行代碼。

letconst情況下,它僅在聲明實際發生時(並且僅在沒有立即賦值時)將其初始化為undefined

在您的示例中,變量App仍處於Temporal Dead Zone中,並且在該點嘗試訪問它會導致參考錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM