javascrit三大组成部分
- ECMAScript
- DOM
- BOM
let:写法与var一致,也是用来声明变量
var :
- 可以重复声明
- 作用域:全局作用域/函数作用域(局部作用域只能在函数中生成,只有在函数外生成的就是全局变量)
if(true){
var c=10 //全局
}
console.log(c) //10
- 可以预解析
let:
- 不可以重复声明,使用let 在同一作用域内声明了相同的变量会报错
- 作用域:全局作用域,块级作用域(只要是在一对花括号区域内)
- 不可以预解析(提升变量)严格遵守先声明后使用的原则
- es6中由于IE的低版本不兼容es6新语法,所以在使用中的考录兼容问题,如果不考虑的话(请用户升级版本)优先推荐使用let/const
var a = 10;
var a = 15; //报错
console.log(a);
块级作用域 : 只要是一个对花括号 就是一个块级作用域
块级作用域类似ES5中局部作用域,声明在其中的变量,出了该作用域,失效
if(true){
let a = 1;
}
console.log(a); //报错
var lis = document.querySelectorAll("li");
for(let i = 0; i < lis.length; i++){
lis[i].onclick = function () {
console.log(this.textContent); //输出文本内容
} //在此for循环中不需要单独保存i的值
}
// 上述for相当于 循环几次,出现几个块级作用域
{
let i = 0;
lis[i].onclick = function () {
console.log(i);
}
}
{
let i = 1;
lis[i].onclick = function () {
console.log(i);
}
}
//省略、、、、、、、、、、
console.log(i);
const:声明常量
常量:不可以改变,变量:可以改变
- 使用let声明的变量可以改变,使用const声明的常量不可以改变
const m=100;
m=200; //直接报错 报错信息Assignment to constant veriable.
- 声明的时候,必须赋值
- 其他情况,可以let一致(不重复,块级作用域,不预解析)