var、let和const的区别
- 块级作用域
- 变量提升
- 重名
<script>
/**
* ----------------------------------
* var 没有块级作用域
* let const 有块级作用域
* ----------------------------------
*/
// console.log()出来的结果为0,1,2,3,4,5
// for (var i = 0
// console.log(i)
// }
// console.log(i)
// 输出结果为5
// if (true) {
// var i = 5
// }
// console.log(i)
// 会报错;i is not defined
// if (true) {
// const或者let i = 5
// console.log(i)
// }
// console.log(i)
/**
* ----------------------------------
* var 有变量提升
* let const 没有变量提升
* 暂时性死区(temporal dead zone - TDZ)
* ----------------------------------
*/
// // var a
// console.log(a)
// // var a = 10
// console.log(a)
// const a = 10
/**
* ----------------------------------
* var 可以重名
* let const 不能重名
* ----------------------------------
*/
// 输出结果为10
// var a = 5
// var a = 10
// console.log(a)
// 报错 Identifier 'a' has already been declared
// let a = 5
// let a = 10
// console.log(a)
// 报错 Identifier 'a' has already been declared
// var a = 5
// let a = 10
// console.log(a)
/**
* ----------------------------------
* 测试题
* ----------------------------------
*/
// 题目1
// // 结果为10
// function fn() {
// let a = 10
// if (true) {
// let a = 5
// }
// console.log(a)
// }
// fn()
// 题目2
// // 结果为报错
// var a = 5
// if (true) {
// a = 200
// let a = 10
// }
// console.log(a)
// 题目3
// // 结果为5
// var a = 5
// if (true) {
// let a = 10
// }
// console.log(a)
// 题目4
// // 结果为undefined
// function fn() {
// console.log(a)
// var a = 10
// }
// var a = 5
// fn()
</script>