es6之let,const关键字

本文详细介绍了ES6中let与const关键字的作用域特点、变量提升、暂时性死区等概念,并通过实例展示了如何利用这些特性进行更高效、安全的编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、let,const

  1. 在es5中没有块级作用域,只有函数作用域和全局作用域,例如{ }不能成为一个作用域,但在es6中可以
for(var i=0;i<4;i++)
{}
console.log('i:',i);//4

这是因为i是在全局的,最后打印的是for循环里面最后的结果。用let替换var则结果为not defined。

for(let i=0;i<4;i++){
}console.log('i:',i);//i is not defined

这是因为let形成了一个块级作用域
2. let、const没有变量提升
先来看看var 变量提升的一个小例子

    console.log(a);
    var a=0;
}
f();//undefined```这段代码在执行顺序为```function f(){
    var a;//变量提升
    console.log(a);
    a=0;//变量赋值
}
f();//undefined```如果用let,则结果为```function f(){
    console.log(a);
    let a=0;
}
f();//is not defined

注意undefined跟is no defined是不同的,undefined是一个类,在这里表示变量有定义但没有赋值,而后者则意味没有定义变量。

3. 暂时性死区

var a=0;
function f(){
    console.log(a);
    let a;
}
f();//a is not defined

先定义了var变量,后面再在函数中let变量,形成了块作用域,由于变量名相同,所有会导致var失效

4. 不能重复定义

    let a;
    let a;
}//报错

const类似

5. let块级写法可以代替立即执行匿名函数

let config;
{
  config=[];
    config.push(1);
    config.push(2);
    console.log(config);
}//[ 1, 2 ]

6.在es6中函数不被提升,这部分到函数部分再一起来分析。
7. 一个简单的例子let实现闭包的效果

var arr=[];
function f(){
    for(var i=0;i<5;i++)
    {
        arr.push(function(){
            console.log(i);
        });
    }
}
f();
arr[1]();//5
arr[2]();//5
arr[3]();//5

这段代码总是打印出5,现在使用闭包使其输出0~4

var arr=[];
 function f(){
    for(var i=0;i<5;i++)
    {
        arr.push((function(i){
            return function(){
                console.log(i);
            }
        })(i));
    }
 }
 f();
 arr[0]();//0
 arr[1]();//1
 arr[2]();//2

将第一段代码的for循环中的var改为let,即可实现第二段代码的效果。
8. const定义常量后不能再被修改

const a=0;
function f(){
    a=1;
    console.log(a);
}
f();//报错

那么现在来看看这段代码

const a=0;
function f(){
    a=1;
    console.log(a);
}
f();//报错

咦,这里为什么有可以修改呢?请注意,这里指的不能修改是指不能修改变量的地址,也即使地址指针。如果要彻底是其不能修改,那可以用freeze();方法冻结它。在原来的代码上添加

Object.freeze(a);
a.sex='girl';

则会报错Can’t add property sex, object is not extensible。接下来会有一系列笔记,相信自己详细内容会整理的更加的详细。题外话:本人也是es6初学,没有太多的经验,写博客纯属是为了这里自己的笔记和一些想法,若有哪位仁兄仁姐看了本人文章,欢迎指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值