ECMAScript let与const

发布时间 2023-05-31 09:47:15作者: 它的眼角开过光

let关键字:

一、变量声明

1、var可以直接使用

2、window.location.href===location.href

3、let和var相似

不同点:

let声明的变量只在当前(块级)作用域内有效

let或const声明的变量不能被重复声明

不存在变量提升

二、ES6之前的作用域:全局作用域、函数作用域、eval作用域

三、块级作用域:通俗的讲,就是一对花括号中的区域{……}

1、if(){}

2、switch(){}

3、for(){}

4、try{}catch(err){}

5、{}

注意:var obj={a:1}这里的{}指的是变量,不是块级作用域

四、小例子:生成10个按钮,每个按钮点击的时候弹出1-10

var:

var i=0;
for(var i=1;i<=10;i++)
{
    //通过字节型匿名函数,形成一个独立的函数作用域,将i传进去
    (function(i){
        var btn=document.createElement('button');  //生成按钮
        btn.innerText=i;//插入内容
        btn.onclick=function(){
             alert(i);
        };
        documnet.body.appendChild(btn);
    })(i);//形参i传值
}

let:

    for (let i = 1; i <= 10; i++) {        
            var btn = document.createElement('button');  //生成按钮
            btn.innerText = i;//插入内容
            btn.onclick = function () {
                alert(i);
            };
            document.body.appendChild(btn); 
    }

 

const关键字:

一、常量必须在声明的时候赋值

二、常量声明后不能被修改

三、常量为引用类型的时候,可以修改该引用类型

        地址不改变,地址上的值可以改变。

二、与let特性类似

三、关于const的一些问题:

1、怎么解决引用类型的常量可以被修改的问题

const xiaoming = {
    age: 14,
    name: '小明'
};
Object.freeze(xiaoming);//加了这个,引用类型常量不可以被修改
console.log(xiaoming);
xiaoming.age = 22;
console.log(xiaoming);