【Day2】变数宣告var、let、const的区别

但是老师教我用var宣告变数,但我也看到有同学用 let 与 const 宣告变数,这是怎麽一回事呢?

//建立一个变数郭靖(guoJing)
var guoJing;

也可以看到这样:

//建立一个建立一个名为黄蓉(huangRong)的变数,给她'打狗棒法'的值
let huangRong = '打狗棒法';

//建立一个洪七公(hongQigong)的常数,给他「北丐」的值
const hongQigong = '北丐';

var、let、const这三兄弟到底有甚麽差别呢?

原来除了用var宣告变数之外,在ES6之後,变数区分为变数与常数,透过 var 与 let 宣告「变数」,透过const宣告「常数」。

var 和 let 最大的区别在於「作用域」不同,这一点我们先放在心上,之後再深入探讨。

先来看看var:

//建立一个变数郭靖(guoJing)
var guoJing;
console.log(guoJing);
//未赋值,所以出现的结果为 undefined

guoJing = '降龙十八掌';
console.log('郭靖使出 ' + guoJing);
//结果为"郭靖使出 降龙十八掌"

guoJing = '空明拳';
console.log('郭靖使出 ' + guoJing);
//结果为"郭靖使出 空明拳"

var guoJing = '九阴真经';
//再次用var宣告 guoJing = '九阴真经';
console.log('郭靖使出 ' + guoJing);
//结果为"郭靖使出 九阴真经"

使用var的时候,同一个变数名称可以再重新「宣告」,重新赋值。

再看看使用let的状况:

//建立一个建立一个名为黄蓉(huangRong)的变数,给她'打狗棒法'的值
let huangRong;
huangRong = '打狗棒法';
console.log('黄蓉使出 ' + huangRong);
//结果为"黄蓉使出 打狗棒法"

huangRong = '落英神剑掌';
console.log('黄蓉使出 ' + huangRong);
//结果为"黄蓉使出 落英神剑掌"

let huangRong = '兰花拂穴手';
//Uncaught SyntaxError: Identifier 'huangRong' has already been declared

使用 let 比使用 var 来宣告变数严谨,如果宣告时未赋值,并不会以undefined初始化,所以从宣告到初始化这段时间会无法使用,这个时间差称为「暂时死区」。

let 能重复赋值,但是同一个变数名称只能宣告一次,如果重复宣告会出现:

「Uncaught SyntaxError: Identifier 'huangRong' has already been declared」

提醒你已经用let宣告过这个变数了。

让我们来试试const:

//建立一个洪七公(hongQigong)的常数,给他「北丐」的值
const hongQigong = '北丐';
console.log('洪七公是 ' + hongQigong);
hongQigong = '美食家';
//Uncaught TypeError: Assignment to constant variable.

const hongQigong = '美食家';
//Uncaught SyntaxError: Identifier 'hongQigong' has already been declared

const是用来宣告常数,也就是不会变动的常量,所以不能重复宣告,也不能重复赋值。

重复宣告会告诉你:

「Uncaught SyntaxError: Identifier 'hongQigong' has already been declared」

重复赋值则会提醒你:

「Uncaught TypeError: Assignment to constant variable.」

因为以上这些区别,使用var、let、const来宣告变数的时机与场景有不同的区别,语意上也有明确区分。


<<:  【Day2】VsCode相关套件安装及建立React专案和React的小小介绍!!

>>:  Day2 基础安装 + 加码:nvm

30天学会Python: Day 23-交换数值

要交换两个变数的值,在 Python 有几种写法 可以先另外建立一个变数,再互相指派,假设输入的数值...

金钥丛集(Key clustering)

哈希上下文中的碰撞通常是指哈希函数从两个不同的输入消息生成相同哈希值的情况。有些,例如维基百科,可能...

DAY 4 - 牛头怪

大家好~ 我是五岁~ 今天来画牛头怪~ 今天会尝试卡通风格~ 目标是一只跟人一样站立的牛头怪,武器是...

图的资料结构

3 图的资料结构 今天来介绍我们储存一张图的时候,几种常见的资料结构:相邻矩阵(Adjacency ...

[区块链&DAPP介绍 Day12] Solidity 教学 - contracts-1

今日来介绍 solidity 里的 contracts。 contract contract 其实是...