var:
- 可以重复声明,没有报错和警告
- 无法限制修改
- 没有块级作用域,{ }
let与const:
- 不能重复声明
- 都是块级作用域,{ }
块内声明的,块外无效
- let 是变量,可以修改
- const 是常量,不能修改
重复声明
var 可以重复声明 而 let const 不行
var a = 12;
var a = 5;
alert(a);
// 会报错
let a = 12
let a = 5
alert(a)
块级作用域
var 没有自己的块级作用域 let const 有
if (true) { // 不会报错且弹出 a
var a = 12;
}
alert(a);
if (true) { // 报错
let a = 12;
}
alert(a);
{ // 报错 找不到 a
const a = 12;
}
alert(a);
函数本身就是var 的块级作用域 垫了个函数 所以可以正确显示
<input type="button" value="按钮1">
<input type="button" value="按钮2">
<input type="button" value="按钮3">
<script>
var btn = document.querySelectorAll('input');
for (var i = 0; i < btn.length; i++) {
(function (i) {
btn[i].onclick = function () {
alert(i);
}
})(i)
}
有自己的块级作用域 可以正确显示
<input type="button" value="按钮1">
<input type="button" value="按钮2">
<input type="button" value="按钮3">
<script>
var btn = document.querySelectorAll('input');
for (let i = 0; i < btn.length; i++) {
btn[i].onclick = function () {
alert(i);
}
}
</script>
const的使用
注意1 一旦给const修饰的标识符被赋值之后 不能修改
注意2 在使用const 定义标识符 必须进行赋值
注意3 常量的含义是指向的对象不能修改 但是可以改变对象内部的属性
const obj = {
age: 18,
name: '男神'
}
console.log(obj);
obj.age = 19
obj.name = '小川'
console.log(obj);