第二讲 let和const命令
前人栽树后人乘凉,前人挖坑后人遭殃!!!
JS是弱类型语言,当初设计者为了使用的便捷,开发人员开心,留下了不少坑。请看JS系列坑之技术细节:
var关键字挖的坑
1.可以重复声明变量
var a=88;
var a="张老师";
console.log(a);
填坑:
ES,let关键字
let a=88;
let a="张老师";
console.log(a);
let用来修饰变量,const用来修饰常量
2.没有常量
//PI:不可变的量
var PI=3.14;
PI=5.78999;
console.log(PI);
//使用的另外const
const PI=3.14;
//PI=5.78999;
console.log(PI);
3.变量提升问题
//3.坑3变量提升问题
console.log(c);
继续
console.log(c);
var c=10;
但是在js编译可以
原理:
var c;
console.log(c);
c=10;
使用let
console.log(c);
let c=10;
效果:
关于函数的代码
console.log(d);
d();
继续:
console.log(d);
d(); //函数
//上面都是报错;
var d=function () {
console.log(222);
}
也是一种变量提升
var d;
console.log(d);
d();
使用let关键字
console.log(d);
d(); //函数
//上面都是报错;
let d=function () {
console.log(222);
}
总结:js编译器会在编译js之前,首先对这些代码找到声明,并用合适的作用域将他们关联起来。
4.const常量
4.1 常量名要大写(潜规则)
const PI=3.14; //const a=3.14;不太好
4.2 常量要赋值,使用之前赋初始值
//2.赋值
const PI=3.14; //???
console.log(PI);
4.3 常量具有块级作用域
if(true){
const MN=4.00;
console.log(MN);
} //MN到},块级生命周期已经结束了.
console.log("..."+MN);
4.4 常量声明之后,不能更改
// const HEI=8848;
//HEI=8899; //HEI:readonly,只读,不能更改
const stus=["张晨","李晨","王晨"];
stus.push("尤晨光");
console.log(stus);
//常量是stus,代表是一个数组,数组指向一个地址,这个地址是一个常量,地址是不可以更改的,里面的内容可以更改。
// stus=["aaa","bbb"]; 更改地址,不可以。
5.let经典案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let案例</title>
<script>
//单击复选框的时候,测试里面i值--》复选框的值;
window.onload=function () {
var chboxs=document.getElementsByTagName("input");
for(let i=0;i<chboxs.length;i++){
//重点观察;
//2.使用了js的闭包机制,
//闭包:内部函数可以访问其所在外部函数种的变量和参数;
// (function (i) {
// chboxs[i].onclick=function () {
// alert(i);//猜测i值;
// }
// })(i);
//3.使用let关键字
chboxs[i].onclick=function () {
alert(i);//猜测i值;
alert("-->"+ chboxs[i].value);
}
}
}
</script>
</head>
<body>
<!-- html内容-->
AAAIT学院课程:
<input type="checkbox" value="JAVA">JAVA
<input type="checkbox" value="前端">前端
<input type="checkbox" value="AI">AI
<input type="checkbox" value="PYTHON">PYTHON
</body>
</html>
标签:ES6,const,log,let,var,console,PI
From: https://blog.51cto.com/teayear/7380661