let var const理解记录

变量声明包括let  var const

在这之前,需要提一点:

如果一个变量没有声明直接被使用,那该变量自动会变为全局变量。

i = 10; // i现在是全局变量

该缺陷是因为 在js设计之初,为了方便初学者而不要求强制申明变量导致的,

后面推出的strict模式修补了这一问题

在js代码第一行写上:  'use strict

它的作用是在声明了之后,会严格检测该文件内的变量是否通过var申明,若无则报错

它们的区别如下:

对其中的概念解释如下:

1、作用域 

作用域既是该值能够生效,能够被访问的区域范围。

var 为全局作用域,let和const是局部作用域(仅在函数体内可用)

if(true) {
    var a = 1;
    let b = 2;
    const c = 3;
}

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() {
    console.log(v1);
    var v1 = 200;
    console.log(v1);
}
foo();
console.log(v1);

 输出结果为  undefined  undefined 200 100 

为什么呢?

因为这里还有函数提升,

函数声明的优先级是要高于变量声明的   即  function foo() 的声明,在代码执行时会被提到最顶端

单纯的变量提升


function test () {
    console.log(a);  //undefined
    var a = 123; 
};

test();


// 它的实际执行顺序如下

function test () {
    var a;
    console.log(a);
    a = 123;
}
test();


// 即对a的声明被提到了最顶部去执行

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

97pra

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值