var let const三者的區別

2022-09-23 10:18:10 字數 1478 閱讀 6865

本文參考,csdn

菜鳥教程

老生常談的問題了

也看了網上各種解析,自己理解了一下

在了解 var、let、const三者的區別 之前,我們需要明白乙個東西:作用域

作用域分為全域性作用域,函式作用域。當然,這是es5的說法

es6新增了塊級作用域, 塊作用域由 包括,if語句和 for語句裡面的也屬於塊作用域。

`
var出的變數是函式級作用域,作用範圍是在函式開始階段和函式執行完成之前內都是存在的 ,沒有塊的概念,可以跨塊訪問, 不能跨函式訪問 ;

let出的變數作用域是 塊作用域,在離開某一**塊,該變數就會被銷毀不存在, 只能在塊作用域裡訪問,不能跨塊訪問,也不能跨函式訪問 .

const 用來定義常量,使用時必須初始化(即必須賦值),只能在塊作用域裡訪問,而且不能修改。

````j**ascript

// 塊作用域

console.log(a); // 1

// console.log(b); // 報錯

// console.log(c); // 報錯

// 函式作用域

(function a() )();

// console.log(d); // 報錯

// console.log(e); // 報錯

// console.log(f); // 報錯

## 3. const定義的物件屬性是否可以改變

````j**ascript

const person =

person.name = 'test'

console.log(person.name)

執行上述**,發現person物件的name屬性確實被修改了,這是怎麼回事呢?

因為物件是引用型別的,person中儲存的僅是物件的指標,這就意味著,const僅保證指標不發生改變,修改物件的屬性不會改變物件的指標,所以是被允許的。也就是說const定義的引用型別只要指標不發生改變,其他的不論如何改變都是允許的。

然後我們試著修改一下指標,讓person指向乙個新物件,果然報錯

````j**ascript

const person =

person =

> const不能被修改指的是它的指標(記憶體位址)不能被修改,這就意味著,const僅保證指標不發生改變,修改物件的屬性不會改變物件的指標,所以是被允許的。也就是說const定義的引用型別只要指標不發生改變,其他的不論如何改變都是允許的。

>

>

>

> 簡單來說:const只是乙個指標,指向乙個記憶體空間,記憶體空間的內容可以改變,但是const指向乙個新的空間就會報錯

var let const三者的區別

首先三者都是用來宣告變數的 作用範圍 var沒有塊級作用域,在任何位置定義的變數在外層都可以訪問到 作用域 全域性作用域 在最外層定義的變數 區域性作用域 在 中定義的變數 特點 首先如果在函式內部,就優先在函式內部查詢變數,如果沒有就繼續向外層查詢 var定義的變數可以提公升 console.lo...

var let const三者的區別

1.let不存在變數提公升 使用let宣告的變數,不會像使用var那樣存在 變數提公升 的現象。所以使用let宣告變數,必須遵循 先宣告,後使用 的原則。否則會報錯 console.log a referenceerror 在申明之前 a報錯 let a 10 如果是var宣告的變數,則不會報錯。c...

var, let, const三者之間的區別

一 作用域 js中有全域性作用域和區域性作用域兩種,var和let 相同點 都是用來宣告變數 不同點 1 var 是全域性宣告。let是區域性宣告,只在宣告的塊中有效 塊級作用域 console.log a 1 console.log b b is not defined 2 var宣告存在變數提公...