整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript let 和 const的區別,

          JavaScript let 和 const的區別,及應用場景分析

          CMAScript 2015(ECMAScript 6)

          ES2015(ES6) 新增加了兩個重要的 JavaScript 關鍵字: letconst

          let 聲明的變量只在 let 命令所在的代碼塊內有效。

          const 聲明一個只讀的常量,一旦聲明,常量的值就不能改變。

          在 ES6 之前,JavaScript 只有兩種作用域: 全局變量函數內的局部變量

          全局變量

          在函數外聲明的變量作用域是全局的:

          實例

          var carName="Volvo";
           
          // 這里可以使用 carName 變量
          function myFunction() {
              // 這里也可以使用 carName 變量
          }

          全局變量在 JavaScript 程序的任何地方都可以訪問。

          局部變量

          在函數內聲明的變量作用域是局部的(函數內):

          實例

          // 這里不能使用 carName 變量
          
          function myFunction() {
              var carName="Volvo";
              // 這里可以使用 carName 變量
          }
          // 這里不能使用 carName 變量

          函數內使用 var 聲明的變量只能在函數內容訪問,如果不使用 var 則是全局變量。

          JavaScript 塊級作用域(Block Scope)

          使用 var 關鍵字聲明的變量不具備塊級作用域的特性,它在 {} 外依然能被訪問到。

          { 
              var x=2; 
          }
          // 這里可以使用 x 變量

          在 ES6 之前,是沒有塊級作用域的概念的。

          ES6 可以使用 let 關鍵字來實現塊級作用域。

          let 聲明的變量只在 let 命令所在的代碼塊 {} 內有效,在 {} 之外不能訪問。

          { 
              let x=2;
          }
          // 這里不能使用 x 變量

          重新定義變量

          使用 var 關鍵字重新聲明變量可能會帶來問題。

          在塊中重新聲明變量也會重新聲明塊外的變量:

          實例

          var x=10;
          // 這里輸出 x 為 10
          { 
              var x=2;
              // 這里輸出 x 為 2
          }
          // 這里輸出 x 為 2

          let 關鍵字就可以解決這個問題,因為它只在 let 命令所在的代碼塊 {} 內有效。

          實例

          var x=10;
          // 這里輸出 x 為 10
          { 
              let x=2;
              // 這里輸出 x 為 2
          }
          // 這里輸出 x 為 10

          瀏覽器支持

          Internet Explorer 11 及更早版本的瀏覽器不支持 let 關鍵字。

          下表列出了各個瀏覽器支持 let 關鍵字的最低版本號。

          循環作用域

          使用 var 關鍵字:

          實例

          var i=5;
          for (var i=0; i < 10; i++) {
              // 一些代碼...
          }
          // 這里輸出 i 為 10

          使用 let 關鍵字:

          實例

          let i=5;
          for (let i=0; i < 10; i++) {
              // 一些代碼...
          }
          // 這里輸出 i 為 5

          在第一個實例中,使用了 var 關鍵字,它聲明的變量是全局的,包括循環體內與循環體外。

          在第二個實例中,使用 let 關鍵字, 它聲明的變量作用域只在循環體內,循環體外的變量不受影響。

          局部變量

          在函數體內使用 varlet 關鍵字聲明的變量有點類似。

          它們的作用域都是 局部的:

          // 使用 var
          function myFunction() {
              var carName="Volvo";   // 局部作用域
          }
          
          // 使用 let
          function myFunction() {
              let carName="Volvo";   //  局部作用域
          }

          全局變量

          在函數體外或代碼塊外使用 varlet 關鍵字聲明的變量也有點類似。

          它們的作用域都是 全局的:

          // 使用 var
          var x=2;       // 全局作用域
          
          // 使用 let
          let x=2;       // 全局作用域

          HTML 代碼中使用全局變量

          在 JavaScript 中, 全局作用域是針對 JavaScript 環境。

          在 HTML 中, 全局作用域是針對 window 對象。

          使用 var 關鍵字聲明的全局作用域變量屬于 window 對象:

          實例

          var carName="Volvo";
          // 可以使用 window.carName 訪問變量

          使用 let 關鍵字聲明的全局作用域變量不屬于 window 對象:

          實例

          let carName="Volvo";
          // 不能使用 window.carName 訪問變量

          重置變量

          使用 var 關鍵字聲明的變量在任何地方都可以修改:

          實例

          var x=2;
           
          // x 為 2
           
          var x=3;
           
          // 現在 x 為 3

          在相同的作用域或塊級作用域中,不能使用 let 關鍵字來重置 var 關鍵字聲明的變量:

          var x=2;       // 合法
          let x=3;       // 不合法
          
          {
              var x=4;   // 合法
              let x=5   // 不合法
          }

          在相同的作用域或塊級作用域中,不能使用 let 關鍵字來重置 let 關鍵字聲明的變量:

          let x=2;       // 合法
          let x=3;       // 不合法
          
          {
              let x=4;   // 合法
              let x=5;   // 不合法
          }

          在相同的作用域或塊級作用域中,不能使用 var 關鍵字來重置 let 關鍵字聲明的變量:

          let x=2;       // 合法
          var x=3;       // 不合法
          
          {
              let x=4;   // 合法
              var x=5;   // 不合法
          }

          let 關鍵字在不同作用域,或不同塊級作用域中是可以重新聲明賦值的:

          let x=2;       // 合法
          
          {
              let x=3;   // 合法
          }
          
          {
              let x=4;   // 合法
          }

          變量提升

          JavaScript 中,var 關鍵字定義的變量可以在使用后聲明,也就是變量可以先使用再聲明

          實例

          // 在這里可以使用 carName 變量
           
          var carName;

          let 關鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用。

          // 在這里不可以使用 carName 變量
          
          let carName;

          const 關鍵字

          const 用于聲明一個或多個常量,聲明時必須進行初始化,且初始化后值不可再修改:

          實例

          const PI=3.141592653589793;
          PI=3.14;      // 報錯
          PI=PI + 10;   // 報錯

          const定義常量與使用let 定義的變量相似:

          • 二者都是塊級作用域
          • 都不能和它所在作用域內的其他變量或函數擁有相同的名稱

          兩者還有以下兩點區別:

          • const聲明的常量必須初始化,而let聲明的變量不用
          • const 定義常量的值不能通過再賦值修改,也不能再次聲明。而 let 定義的變量值可以修改。
          var x=10;
          // 這里輸出 x 為 10
          { 
              const x=2;
              // 這里輸出 x 為 2
          }
          // 這里輸出 x 為 10

          const 聲明的常量必須初始化:

          // 錯誤寫法
          const PI;
          PI=3.14159265359;
          
          // 正確寫法
          const PI=3.14159265359;

          并非真正的常量

          const 的本質: const 定義的變量并非常量,并非不可變,它定義了一個常量引用一個值。使用 const 定義的對象或者數組,其實是可變的。下面的代碼并不會報錯:

          實例

          // 創建常量對象
          const car={type:"Fiat", model:"500", color:"white"};
           
          // 修改屬性:
          car.color="red";
           
          // 添加屬性
          car.owner="Johnson";

          但是我們不能對常量對象重新賦值:

          實例

          const car={type:"Fiat", model:"500", color:"white"};
          car={type:"Volvo", model:"EX60", color:"red"};    // 錯誤

          以下實例修改常量數組:

          實例

          // 創建常量數組
          const cars=["Saab", "Volvo", "BMW"];
           
          // 修改元素
          cars[0]="Toyota";
           
          // 添加元素
          cars.push("Audi");

          但是我們不能對常量數組重新賦值:

          實例

          const cars=["Saab", "Volvo", "BMW"];
          cars=["Toyota", "Volvo", "Audi"];    // 錯誤

          瀏覽器支持

          Internet Explorer 10 及更早版本的瀏覽器不支持 const 關鍵字。

          下表列出了各個瀏覽器支持 const 關鍵字的最低版本號。

          重置變量

          使用 var 關鍵字聲明的變量在任何地方都可以修改:

          實例

          var x=2;    //  合法
          var x=3;    //  合法
          x=4;        //  合法

          在相同的作用域或塊級作用域中,不能使用 const 關鍵字來重置 varlet關鍵字聲明的變量:

          var x=2;         // 合法
          const x=2;       // 不合法
          {
              let x=2;     // 合法
              const x=2;   // 不合法
          }

          在相同的作用域或塊級作用域中,不能使用 const 關鍵字來重置 const 關鍵字聲明的變量:

          const x=2;       // 合法
          const x=3;       // 不合法
          x=3;             // 不合法
          var x=3;         // 不合法
          let x=3;         // 不合法
          
          {
              const x=2;   // 合法
              const x=3;   // 不合法
              x=3;         // 不合法
              var x=3;     // 不合法
              let x=3;     // 不合法
          }

          const 關鍵字在不同作用域,或不同塊級作用域中是可以重新聲明賦值的:

          const x=2;       // 合法
          
          {
              const x=3;   // 合法
          }
          
          {
              const x=4;   // 合法
          }

          變量提升

          JavaScript var 關鍵字定義的變量可以在使用后聲明,也就是變量可以先使用再聲明

          實例

          carName="Volvo";    // 這里可以使用 carName 變量
          var carName;

          const 關鍵字定義的變量則不可以在使用后聲明,也就是變量需要先聲明再使用。

          carName="Volvo";    // 在這里不可以使用 carName 變量
          const carName="Volvo";


          專注于技術熱點大數據,人工智能,JAVA、Python、 C 、GO、Javascript等語言最新前言技術,及業務痛點問題分析,請關注【編程我最懂】共同交流學習。

          et,const來源

          ES2015 引入了兩個重要的 JavaScript 新關鍵詞:let 和 const。

          這兩個關鍵字在 JavaScript 中提供了塊作用域(Block Scope)變量(和常量)。

          在 ES2015 之前,JavaScript 只有兩種類型的作用域:全局作用域函數作用域(局部變量)。都是通過var聲明

          全局作用域

          全局(在函數之外)聲明的變量擁有全局作用域

          實例

          函數作用域或全局作用域中通過關鍵字var聲明的變量,無論在哪里聲明,都會被當成在當前作用域頂部聲明的變量,這就是JavaScript的變量提升機制。我們看下面的代碼:

          變量聲明

          這種變量提升機制在開發時會給我們造成很多的困擾,ECMAScript 6引入了let聲明,用法與var相同,不過用let聲明的變量不會被提升,可以把變量的作用域限制在當前代碼塊中。

          我們將上述代碼中的變量用let進行聲明,如下所示:

          let聲明

          使用let聲明變量,還可以防止變量的重復聲明。例如在某個作用域下已經存在某個標識符,此時再使用let關鍵字聲明它,就會拋出錯誤,如下所示:

          重復聲明變量

          同一作用域下,不能使用let重復定義已經存在的標識符,但如果在不同的作用域下,則是可以的,這一點請讀者注意,如下所示:

          在不同的作用域下

          ECMAScript 6還提供了const關鍵字,用于聲明常量。每個通過const關鍵字聲明的常量必須在聲明的同時進行初始化,如下所示:

          const聲明常量

          與let類似,在同一作用域下用const聲明已經存在的標識符也會導致語法錯誤,無論該標識符是使用var,還是let聲明的。

          如果使用const聲明對象,對象本身的綁定不能修改,但對象的屬性和值是可以修改的,我們看下面的代碼:

          用const聲明對象


          主站蜘蛛池模板: 久久国产午夜一区二区福利| 日本免费一区二区三区最新| www一区二区三区| 久久一区不卡中文字幕| 精品人妻一区二区三区四区| 亚洲国产精品综合一区在线| 中文字幕aⅴ人妻一区二区| 国产一区韩国女主播| 亚洲熟女乱色一区二区三区 | 中文字幕AV一区二区三区| 国产一区二区三区免费视频 | 亚洲人成人一区二区三区| 亚洲AV网一区二区三区| 国产精品夜色一区二区三区 | 亚洲一区二区精品视频| 亚洲无圣光一区二区| 亚洲AV无码一区二区三区DV | 国产乱码精品一区二区三区中| 国产在线无码一区二区三区视频| 国产AⅤ精品一区二区三区久久| 日韩精品一区二区三区在线观看| 国产女人乱人伦精品一区二区| 在线观看精品视频一区二区三区| 精品无码综合一区二区三区| 一区二区免费视频| 一区二区三区人妻无码 | 亚洲欧美日韩中文字幕在线一区| 精品性影院一区二区三区内射 | 亚洲AV无码一区二区乱孑伦AS| AV无码精品一区二区三区宅噜噜| 国产精品亚洲综合一区| 精品3d动漫视频一区在线观看| 日本精品少妇一区二区三区| 国产麻豆媒一区一区二区三区| 精品视频在线观看一区二区| 国产精品第一区揄拍无码| 国产一区二区精品久久91| 无码aⅴ精品一区二区三区| 国产无人区一区二区三区 | 东京热无码av一区二区| 在线精品亚洲一区二区三区|