ES6-let,const

1.let 使用

let 不会像 var一样存在变量提升的情况

"use strict"
function f(){

    console.log(a);//undefined
    var a=3;
}
f();

function f2(){
    console.log(b)//报错,b未定义
    let b=3;
}
f2();

函数内部有同名变量会让外部的变量失效,

var c=3
function f3(){
    console.log(c);//内部有let 定义的变量,先把外部的c失效,然后,不存在变量提升,报错
    let c=2;

}
代替立即执行函数

var config=(function(){
    var config=[];
    config.push(1);
    config.push(2);
    config.push(3);
    config.push(4);
    return config;
})()

let config2=[];
{
    config2.push(1);
    config2.push(2);
    config2.push(3);
    config2.push(4);

}

ES5中函数存在被提升,ES6中函数不会被提升


function f5(){
    console.log(222)
}

function f6(){
    f5();
    if(false){
        function f5(){
            console.log(111)
        }
    }
}
f6();

如果使用严格模式,就是es6规范,不存在函数提升,那么打印结果为222;在es5中,存在函数提升,打印111


经典问题:

var arr=[];

for(var i=0;i<10;i++){

    arr.push(function(){
        console.log(i);
    })

}
arr[2](); //打印10 ,如果想打印2 ,那么代码var i=0改为  let i=0;


改良2 

var arr=[];

for(var i=0;i<10;i++){

    arr.push((function(i){
        return function(){
            console.log(i);
        }
    })(i))

}
arr[2](); //其实就是一个闭包


2 .const使用

'use strict'
const a={
	name:'jim'
}

let b={

}

//a=b; //报错,等于改变a的值了,实际中a是一个地址,可以改变地址指向的内容,但不改变a
a.age=23
Object.freeze(a);//加入改行后,a指向的对象也不能改变了
a.sex='male'//报错





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值