[es6学习笔记]块级作用域绑定

tip: 默认使用const,实在需要变量再使用let

var声明变量的提升机制:
//js在编译时会将方法里的变量预加载 ,提升到顶级
function getValue(condition){
    if(condition){

        var value='blue';
        return value;
    }else{
        console.info(value);
        //这里可以访问value :undefined
        return null;
    }
    //这里可以访问value :undefined
}
getValue();

//实际上
function getValue(condition){
    var value;
    if(condition){

        value='blue';
        return value;
    }else{
        console.info(value);
        //这里可以访问value :undefined
        return null;
    }
    //这里可以访问value :undefined
}

块级声明:
let声明:
    动态
    和var无缝,禁止了提升机制
    在重复定义时抛出异常
 const声明:
    静态 
    必须初始化 const name; //错误 未初始化常量
    不能重复声明
    const 变量不能修改绑定 但是可以修改绑定的属性值
const sta='ccc';
sta='bbb';
//- Assignment to constant variable. 分配常数变量

const a={
    name:'aaaa'
};
console.info(a);
a.name="ccc";
console.info(a);
//没问题
let和const在未声明前调用会出现临时死区  基本用不到

循环中块级作用域的绑定:
    在循环中的var i会提升到循环外
for(var i=0;i<10;i++){
}
console.info(i);
//10

for(let i=0;i<10;i++){
}
console.info(i);
// i is not defined
    循环中的作用域绑定:
var arr=[];

(function (arr){
    for(var i=0;i<10;i++){
        arr.push(
            function (){
                return i;
            }

            );
    }
})(arr);
arr.forEach(function (i){
    console.info(i());
})
//1010101010101001
   原始解决方案:
var arr=[];

(function (arr){
    for(var i=0;i<10;i++){
        arr.push(
            ( //快速执行函数
            function (value){
                return function (){
                return value;
                };
    
            }(i)
            )
            );
    }
})(arr);
arr.forEach(function (i){
    console.info(i());
})
//0123456789

将var替换为let则没有这种问题

for循环中不能修改的常量也可以使用const
如 for in forEach数组或者对象可以直接用


var 定义在首层时会将变量设置到window上
var a='aaa';
console.info(window.a);

而let或const创建的不会

































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值