var let const 的区别

变量与常量的区别

常量

特性:常量保存的是不可以变化的量,在js中是只能使用,不能修改

声明与赋值:在声明常量时,必须赋值,不能重复赋值

变量

命名规则:

  • 变量名称可以由字母、数字、下划线(_)、美元符号($)组成,其中不能以数字作为开头,不能使用JS中的关键字。不推荐使用中文
  • 驼峰命名法、下划线命名法

赋值:

  • 变量只是声明,但是没有赋值,则保存的值为undefined
  • 变量可以被多次赋值,且赋不同类型的值

声明:可以一次性声明多个变量

块级作用域

  • ES6中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域

var

变量提升机制

  • 无论在全局作用域中或还是在局部作用域中,使用var关键字声明的变量,都会被提升到该作用域的最顶部
  • 通过var定义(声明)的变量,在定义语句之前就可以访问到
console.log(a); //underfunded
var a = 1;

//因为有变量提升的缘故,上述代码执行顺序为:
var a;
console.log(a);
a = 1;

没有块级作用域

for(var = 1; i < 6 ; i++){
    console.log('内循内'+ i);
    }
    console.log('循环外' + i);

let

作用:声明一个块级作用域的本地变量,设置初始值

语法:

//声明变量
let x;
//声明并设置初始值
let y = 1;
//重新赋值
y = "6"
console.log(y);//6

特点

特点1:在相同作用域内,不允许重复声明同一个变量

<script>
        function fnc() {
            let a = 10;
            let a = 1; //Identifier 'a' has already been declared
        }
    </script>

特点2:有块级作用域

{
    let a = 1;
    console.log(a); //1
}
    console.log(a); //undefined

特点3:不会发生变量提升

console.log(b);//Cannot access 'b' before initialization(无法在初始化之前访问变量)
let b = 1;

const 

语法:必须在声明的同时设置初始值

const c = 6;

特点

特点1:基本类型数据无法重新赋值

const d = 1;
console.log(d); //1
d = 2;
console.log(d); //Assignment to constant variable.(赋值了变量给常量)

特点2:必须设置初始值(只声明不赋值就会报错)

特点3:有块级作用域

if(true){
    const e = 1;
    console.log(e); //5
}
    console.log(e); //e is not defined
 

特点4:不会变量提升(其声明的常量也不能提升,同样存在暂时性死区,只能在声明的位置后面使用)

if(true){
    console.log(f); //Cannot access 'f' before initialization
    const f = 1
}

特点5:不能重复声明

特点6:变量指向的内存地址所保存的数据不可改动

特点7:简单类型的数据(数值、字符串、布尔值),值保存在变量指向的地址,因此等同于常量;引用类型(对象、数组...),可以更改内容

特点8:复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的知识一个指向时间数据的指针,且const只能保证这个给指针是固定的(即总是指向另一个固定的地址)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值