ES6中let和var和const的區別
- 通過var定義的變數,作用域是整個封閉函式,是全域的 。通過let定義的變數,作用域是在塊級或是子塊中。
for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
// ReferenceError: i is not defined
//計數器i只在for迴圈體內有效,在迴圈體外引用就會報錯。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 變數提升現象:瀏覽器在執行程式碼之前會進行預解析,首先解析函式宣告,定義變數,解析完之後再對函式、變數進行執行、賦值等。
-不論var宣告的變數處於當前作用域的第幾行,都會提升到作用域的頭部。
-var 宣告的變數會被提升到作用域的頂部並初始化為undefined,而let宣告的變數在作用域的頂部未被初始化
// var 的情況
console.log(foo); // 輸出undefined
var foo = 2;
//相當於
var foo; //宣告且初始化為undefined
console.log(foo);
foo=2;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
// let 的情況
console.log(bar); // 報錯ReferenceError
let bar = 2;
//相當於在第一行先宣告bar但沒有初始化,直到賦值時才初始化
- 1
- 2
- 3
- 4
- 5
- 6
但是直接用let宣告變數不賦值是會列印undefined,還是初始化了,只是let宣告放在賦值之後,let宣告會提前但不會初始化。
let a;
alert(a);//值為undefined
alert b;//會報錯
let b;
- 1
- 2
- 3
- 4
- 5
- 只要塊級作用域記憶體在let命令,它所宣告的變數就“繫結”這個區域,不再受外部的影響。總之,在程式碼塊內,使用let命令宣告變數之前,該變數都是不可用的,儘管程式碼塊外也存在相同全域性變數。
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
alert(tmp); //輸出值為123,全域性tmp與區域性tmp不影響
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- let不允許在相同作用域內,重複宣告同一個變數。
// 報錯
function () {
let a = 10;
var a = 1;
}
// 報錯
function () {
let a = 10;
let a = 1;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
-
-
在JavaScript中有三種宣告變數的方式:var、let、const。下文給大家介紹js中三種定義變數的方式const, var, let的區別。
1.const定義的變數不可以修改,而且必須初始化。
1
2
3
4
5
|
const
b = 2; //正確 //
const b;//錯誤,必須初始化 console.log( '函式外const定義b:'
+ b); //有輸出值 //
b = 5; //
console.log('函式外修改const定義b:' + b);//無法輸出 |
2.var定義的變數可以修改,如果不初始化會輸出undefined,不會報錯。
1
2
3
4
5
6
7
8
9
|
var
a = 1; //
var a;//不會報錯 console.log( '函式外var定義a:'
+ a); //可以輸出a=1 function
change(){ a
= 4; console.log( '函式內var定義a:'
+ a); //可以輸出a=4 }
change(); console.log( '函式呼叫後var定義a為函式內部修改值:'
+ a); //可以輸出a=4 |
3.let是塊級作用域,函式內部使用let定義後,對函式外部無影響。
1
2
3
4
5
6
7
8
|
let
c = 3; console.log( '函式外let定義c:'
+ c); //輸出c=3 function
change(){ let
c = 6; console.log( '函式內let定義c:'
+ c); //輸出c=6 }
change(); console.log( '函式呼叫後let定義c不受函式內部定義影響:'
+ c); //輸出c=3 |
相關文章
- JS中const、var 和let的區別JS
- var、let和const的區別
- var和let/const的區別
- ES6中var,let,const的區別
- ES6中var/let/const的區別
- ES5 和 ES6:let const var 區別
- es6 let const與var 的區別
- JavaScript 中的 Var,Let 和 Const 有什麼區別JavaScript
- JavaScript中let、const、var 的區別JavaScript
- let const var 區別
- var let const區別
- let,const,var區別
- var、const、let 的區別
- JavaScript中的var、let 及 const 區別JavaScript
- 【ES6】var、let、const三者的區別
- var與ES6中const、let宣告的變數的區別變數
- var 和 let 的區別
- var、let和const三者有哪些區別?
- ES6 let和var的區別是什麼?
- 深入理解ES6之var,let,const區別
- js中var和let的快速區別JS
- 變數和函式宣告提升,let和var const區別變數函式
- ES6中的let與var的區別
- JavaScript 高階—— ES6新增語法 const(let const var區別)JavaScript
- var、let、const宣告變數的區別變數
- 1分鐘帶你瞭解var let 和 const 的區別
- 淺談let和var的區別
- 教你理解let和var的區別
- var、let和const的知識點
- var,let和const深入解析(一)
- ES6中let 和 const 的新特性
- 【前端面試】(四)JavaScript var let const的區別前端面試JavaScript
- ES6 let和const命令
- js中 let 與 var 的區別JS
- rspec中的let和let!區別
- var、let、const變數宣告的區別及特點變數
- ES6語法——let和const
- let與var的區別