ECMAScript let与const
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);