let var const理解記錄

2021-10-06 17:11:52 字數 2264 閱讀 5953

變數宣告包括let  var const

在這之前,需要提一點:

如果乙個變數沒有宣告直接被使用,那該變數自動會變為全域性變數。

i = 10; // i現在是全域性變數

該缺陷是因為 在js設計之初,為了方便初學者而不要求強制申明變數導致的,

後面推出的strict模式修補了這一問題

在js**第一行寫上:  'use strict

它的作用是在宣告了之後,會嚴格檢測該檔案內的變數是否通過var申明,若無則報錯

它們的區別如下:

對其中的概念解釋如下:

1、作用域 

作用域既是該值能夠生效,能夠被訪問的區域範圍。

var 為全域性作用域,let和const是區域性作用域(僅在函式體內可用)

if(true) 

console.log(a); // a列印值為1

console.log(b); // b列印值為 undefined

console.log(c); // c列印值為 undefined

2、變數宣告

var 和 let可以僅宣告不賦值,但是const必須賦值,否則會報錯

var a = 1 //正確

let b = 1 //正確

const c = 1 //正確

var d //正確 d列印為undefined

let e //正確 e列印為undefined

const f //錯誤

3、是否可修改

var 和let宣告的變數可隨意修改,const宣告的變數  若為基礎型別(undefined null string number boolean)則不可修改,若為引用資料型別(object array), 可以修改值, 不可修改引用物件。

var a = 1;

a =2;

console.log(a) // 2

let b = 1;

b = 2;

console.log(b) // 2

//c為基本資料型別不可修改

const c = 1;

c = 2; //報錯

//d為引用資料型別

const d = [1,2,3];

d.push(4);//對引用資料型別進行值的修改可進行

console.log(d);// [1,2,3,4]

d[0] = 2; // [2,2,3,4]

d = [1,2,3,4,5] //對引用資料型別進行位址修改,報錯

簡單來講 就是const定義的變數 不可以直接修改該變數,若為非基本資料型別,可以修改該變數的值

4、是否可重複宣告

var 可重複宣告  let和const不可重複宣告

var a = 1;

var a = 2; //不報錯,可重複宣告

console.log(a); // 2

//let 和 const 情況相同

let a = 3;//報錯,上面已經宣告過a(var 宣告的也不可以)

let b = 1;

let b =2; //報錯,上面已經宣告過b

5、變數 提公升

var宣告的變數會進行變數提公升,但是賦值不提公升;let和const宣告的變數不會提公升。

console.log(v1);

var v1 = 100;

function foo()

foo();

console.log(v1);

輸出結果為  undefined  undefined 200 100 

為什麼呢?

因為這裡還有函式提公升,

函式宣告的優先順序是要高於變數宣告的   即  function foo() 的宣告,在**執行時會被提到最頂端

單純的變數提公升

function test () ;

test();

// 它的實際執行順序如下

function test ()

test();

// 即對a的宣告被提到了最頂部去執行

let var const的具體區別

if true console.log a a沒有被定義 這裡的乙個塊級作用域就是這if大括號內注意在定義變數的時候 無論是var,let還是const 都盡量都要先賦初始值,因為如果不賦初始值那麼undefined與任何數字進行加減乘除的時候結果都為nan 不了解變數提公升的小夥伴可以去 舉個例子...

let,var,const的使用區別

一 let宣告變數 1.let宣告的變數不會掛在window中,不會造成全域性變數的汙染 2.新增了乙個塊級作用域 以前只有函式作用域,全域性作用域 3.let是不允許重複宣告 4.let不會有宣告提前 只是人為看到的效果,實際上是有宣告提前,提前臨時性的死區中 cannot access num ...

let var const之間的區別

let是es6的新語法,用來區域性變數和var類似但是let只在 塊裡有效,也就是塊作用域 變數提公升是什麼意思這裡很多小夥伴會理解錯 var a 10 func function func 很奇怪這裡為什麼是undifined這就是變數提公升 上面的 等價於 var的變數提公升就是會先把var定義...