let和const区别

let和const

nodejs是javascript的运行环境,可以使用node来测试。

1.定义(声明)变量

es5和es6的区别:

在这里插入图片描述
在这里插入图片描述
1. 作用域

//常见的块级作用域
if(){}

for(){}

while(){}

es5 —>for

//例1
if (true) {
    var a = 20;
}

console.log(a)

//例2
for(var i=0;i<10;i++){
    //var定义的i是全局变量
}

console.log(i)  //10

//例3

var arr = [];

for (var i = 0; i < 10; i++) {
    arr[i] = function() {
        console.log(i)
    }
}

arr[1]() //10
arr[2]() //10

es6 —> for

//例1
if (true) {
    let a = 20;
}
console.log(a) //a is not defined

//例2
for(let i = 0;i<10;i++){
    //let定义的i是局部的变量
}

console.log(i)  //i is not defined

//例3

let arr = [];

for (let i = 0; i < 10; i++) {
    arr[i] = function() {
        console.log(i)
    }
}
arr[1]() //1
arr[2]() //2

2. 是否有变量提升

es5 ---> var有变量提升
var a = 20;
function fn(){
    alert(a)    //undefined
    var a = 5;  
}
fn()

//相当于下面代码

function fn(){
    var a;      //变量提升
    alert(a)
    a = 5;
}
es6 ---> let没有变量提升
let a = 20;
function fn(){
    alert(a);   //a is not defined
    let a = 5;
}

3.是否可以重复定义

es5 ---> 在同一作用域内,var可以重复定义
var a = 10;

//....

var a = 5;
console.log(a); //5
es6 ---> 在同一作用域内,let不可以重复定义
//例1
let a = 10;

//.....
let a = 5;
console.log(a);
//Uncaught SyntaxError: Identifier 'a' has already been declared

//例2

{
    let a = 10; 
    {
        let a = 5;
        console.log(a)
    }
    console.log(a)
}

//例3

for (let a = 1; a < 10; a++) { //父级作用域
    let a = 'abc'; //子级作用域
    console.log(a);
}

注let:

  • let没有变量提升,即在代码块内,只要在let定义之前使用变量就会报错。
  • 在同一个作用域内,不能重复定义变量
  • let声明的变量不能成为window的属性
  • 暂时性死区

3.const定义常量

**const注:const在定义时必须有值,不能后赋值(修改),经常用于定义配置文件**
const arr = ['apple', 'banner'];

// arr = false;
// console.log(arr) //Uncaught TypeError: Assignment to constant variable.

arr.push("orange"); //const定义的对象可以修改,因为对象是引用类型的。

console.log(arr);

基本类型存储在栈内存中

在这里插入图片描述

引用类型同时存储在堆内存和栈内存中:

在这里插入图片描述
例:
在这里插入图片描述
总结:

  • 定义变量使用let,不要使用var
  • const在定义时必须有值,不能后赋值(修改),经常用于定义配置文件。例如:node引用的包,可以使用const
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值