6.3、ES6变量声明 let 和常量const
程序员文章站
2022-07-16 21:15:33
...
一、var声明的问题
// var声明的问题
// 1.存在变量声明
// 2.挂载到window上
// 3.可以声明多次
// 4.只有全局作用域和函数作用于
console.log(a) //undefined 变量提升问题
var a = 10
二、let声明的问题
// let声明的问题
// 1. 不存在变量声明 而存在暂时性死区
// 2.不可以声明多次
// 3.除了全局作用域和函数作用域,还有{}(代码段的域)
// 4.没有挂在到window上
// console.log(b) //报错 暂时性死区 b is not defined
// let b = 10
// 不可以声明多次
// let c = 10
// let c = 20
// console.log(c) //报错 不可以声明多次
console.log(window.b) //报错 暂时性死区
let b = 10
// // 不可以声明多次
// let c = 10
// var c=10
// let c = 20
// console.log(c) //报错 不可以声明多次
// let b = 10
// console.log(window.b) //undefined 不挂在到window上
if (true) {
// let a = 10
var a = 10
}
// console.log(a) // let 声明会报错
console.log(a) // var 10
let a = 10; //全局的
(function() {
console.log(a) //10
a = 5 //改写全局的域
console.log(window.a) //undefined
console.log(a) //5
})()
for (let i = 0; i < 3; i++) {
////for本身是一个父的域 for里面{}又是一个域
let i = 10
console.log(i) // 3 个 10
}
console.log(i) //()中var声明的 3
console.log(i) //()let中声明的 报错()中let声明不是全局的
<ul>
<li>11111111111</li>
<li>11111111111</li>
<li>11111111111</li>
<li>11111111111</li>
<li>11111111111</li>
</ul>
<script>
var oli = document.getElementsByTagName('li')
// for (var i = 0; i < oli.length; i++) {
// oli[i].onclick = function() {
// console.log(i) //点那个都是5
// }
// }
// // 方法一
// for (var i = 0; i < oli.length; i++) {
// oli[i].index = i
// oli[i].onclick = function() {
// console.log(this.index) //利用自定义属性
// }
// }
// // 方法二
// for (var i = 0; i < oli.length; i++) {
// oli[i].onclick = (function(i) {
// return function() {
// console.log(i)
// }
// })(i)
// }
// 方法三
for (let i = 0; i < oli.length; i++) { //for 循环每走一次就会将i存一次
oli[i].onclick = function() {
console.log(i) //利用自定义属性
}
}
const 声明
// const 声明一个常量 同let
// 声明必须赋值
// 声明之后不可以更改
// 如果声明的是引用类型可以修改其属性,但不可以修改其引用
const a = 10;
a = 5
var a = 6
console.log(a) //报错
const c;
c = 10
console.log(c) //报错 声明必须赋值
// const arr = [];
// arr.push('张三')
// console.log(arr) //["张三"]
// // 不可修改器引用
// arr = '123' //报错
var obj = {
name: '张三'
}
// obj = '李四' //报错
obj.name = '李四' //可以
console.log(obj) //{name: "李四"}