JavaScript >> Javascript 文檔 >  >> JavaScript

JavaScript 塊級變量

JavaScript 開發人員長期以來一直在抱怨沒有塊級變量這樣的東西。塊級變量是僅存在於塊語句上下文中的變量(例如 if ) 然後在語句完成執行後立即銷毀。您可以編寫看起來的代碼 喜歡它應該創建塊級變量,例如:

for (var i=0; i < 10; i++){
    //body
}
alert(i);   //10

在這個例子中,它看起來像變量 ifor 的塊級變量 循環(事實上,在其他語言中也會出現這種情況,例如 Java)。然而,該變量是在包含範圍內創建的,因此它仍然可以在 for 之外訪問 如警報所示循環。此代碼在功能上等同於以下代碼:

var i=0;
for (i=0; i < 10; i++){
    //body
}
alert(i);   //10

這就是為什麼專家更喜歡將變量都定義在函數的開頭,以消除塊級變量的錯覺。

事實證明,在一種情況下,您可以有效地創建塊級變量。 with 語句實際上創建了另一個存在變量的範圍。其工作原理的技術細節對於本次對話並不重要,但可以說它增加了在執行 with 期間可用的變量 具有給定對象屬性的語句。例如:

with(location){
    alert(href);
}

在此代碼中,location 對像被傳遞到 with 語句,它自動使 location 的每個屬性 可用作內部變量。訪問 href with 內部 塊相當於訪問 location.href 在所有方面。 with 之後 塊已完成執行,href 變量不再可用(儘管您仍然可以訪問 location.href )。實際上,with 語句具有塊級作用域。問題是,如何實際使用它。

塊級變量的整個想法是將它們定義為有限使用,然後相信它們已被銷毀。最好聲明一堆變量在一個塊中使用,然後知道以後不能再訪問它們。這可以使用 with 有效地完成 和一個對象字面量:

//define two variables: foo and bar
with({ foo: 1, bar: 2 }){
    alert(foo);   //1
    alert(bar);   //2
}
alert(foo);   //Error!

此代碼創建一個具有兩個屬性的對象字面量,foobar 並將其傳遞到 with 陳述。這樣做會在語句中創建兩個變量,foobar ,對應於對象字面量的屬性。這些變量在 with 時被銷毀 塊執行完畢。由於對象文字本身永遠不會存儲在變量中,因此一旦 with 塊也完成執行,因此不再有任何方法可以訪問這些信息。

我不確定這是否適用於重複使用,因為添加另一個範圍也會導致變量查找的性能下降,但這是對語言中未被充分認識的部分的有趣使用。


Tutorial JavaScript 教程
  1. peekABar - 通知欄的 jQuery 插件

  2. node.js中如何解決secretOrPrivateKey必須有值

  3. 停止標籤切換輸入複選框

  4. 使用 Vue 構建桌面應用程序:NW.js

  5. 需要 Vue 的幫助 – BMI 計算器

  6. JavaScript 新目標 |元屬性

  7. tsParticles 1.41.0 發布

  1. 使用 HTML CSS JS 的響應式個人作品集網站 - 第 4 部分

  2. TypeOrm:選擇包含數組中所有值的結果

  3. 將 Typescript、TailwindCSS 和 ESlint 添加到 Next.js 應用程序

  4. StimulusJS 的簡單 i18n !

  5. 在 JavaScript 中處理布爾值

  6. Next.js 電子商務教程:快速購物車集成

  7. 如何在 React 中去抖動和限制 API 調用

  1. SVG進度圈圖像旋轉方向

  2. 在 Angular 應用程序中使用 RxJS 主題管理狀態

  3. 我對 JavaScript 又愛又恨的關係

  4. Jest Mock + Reactjs + SVG