ES6 ------ let 和 const 关键字

简介: ES6 ------ let 和 const 关键字

let 关键字

1.变量不能重复声明

  let star = 'myself'
  let star = 'you'

会报 Identifier 'star' has already been declared 的错误

2.块级作用域

  {
  let star = 'myself'
  }
  console.log(star)

会报 star is not defined 的错误

3.不存在变量提升

  console.log(myself)
  let myself = '前端开发者'

会报Cannot access 'myself' before initialization 的错误

4.不影响作用域链

  let num = 20
  function fn() {
    console.log(num)
  }

在上述代码中,fn(函数内访问了num变量,由于fn((函数内部不存在num变量,所以向上级作用域中查找) 找到了全局作用域,此时num的值就是全局作用域下的20)


**作用域链:**当在一个函数内部声明另一一个函数时,就会出现函数嵌套的效果。当函数嵌套时,内层函数只能在外层函数作用域内执行,在内层函数执行的过程中,若需要引人某个变量,首先会在当前作用域中寻找,若未找到,则继续向上一层级的作用域中寻找,直到全局作用域。我们称这种链式的查询关系为作用域链。

let 案例

  1. let 案例:点击div框,切换颜色
  2. 7e6411a1043f4cf2afb33d599cd246e3.png
  3. b538e600a6c94ddc816443a7c7a96df6.png
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>let实践</title>
    <style>
        .item{
            width:90px;
            height: 40px;
            display: inline-block;
            border: 2px lightblue solid;
        }
    </style>
</head>
<body>
    <div class="container">
        <h2 class="page-header">点击切换颜色</h2><hr/>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
    <script>
        //获取div元素对象
  let items = document.getElementsByClassName('item')
  //遍历并绑定事件
  for(let i=0;i<items.length;i++){
    items[i].onclick = function() {
      //修改当前元素的背景颜色
      items[i].style.background = 'pink'  //var声明时不可用
      //this.style.background = 'pink'   //var和let声明均可用
    }
  }
    </script>
</body>
</html>

如果使用 var 声明, 再使用 items[i].style.background = 'pink' 修改背景颜色, 则此时的 i 为 3,没有这个div块,会报 Cannot read properties of undefined (reading 'style') [ 无法读取未定义的属性(读取“样式”)] 的错误


for循环中 var 和 let 的区别:

var 命令的存在变量提升,var 命令实际只会执行一次。而 let 命令不存在变量提升,所以每次循环都会执行一次,声明一个新变量(但初始化的值不一样)。for 的每次循环都是不同的块级作用域,let 声明的变量是块级作用域的,所以也不存在重复声明的问题。let 声明变量的for循环里,每个匿名函数实际上引用的都是一个新的变量。

const 关键字

const 用于声明 常量

1.一定要赋初始值

  const A

会报 Missing initializer in const declaration(常量声明中缺少初始值设定项) 错误

2.一般常量使用大写(潜规则),小写也不会报错

  const A = 100
  const b = 200

3.常量的值不能修改

  const A = 100
  A = 200

会报 Assignment to constant variable.(Assignment to constant variable.赋值给常数变量) 的错误

4.块级作用域

  {
        const PLAYER = 'UZI'
    }
    console.log(PLAYER);

5.对于数组和对象的元素修改,不算做对常量的修改,不会报错

  const TEAM = ['Lan','Kai','Jing']
    TEAM.push('Yao')

不积跬步无以至千里 不积小流无以成江海

相关文章
|
消息中间件 安全 Java
编程中常见的问题--------const define的区别
编程中常见的问题--------const define的区别
52 0
|
2月前
|
JavaScript 网络架构
ES6-----6种变量
ES6-----6种变量
39 7
|
前端开发
|
前端开发
ES11 ------ 新增属性
ES11 ------ 新增属性
110 0
ES11 ------ 新增属性
|
前端开发 JavaScript 开发者
【C++】 --- C++函数后面加const修饰符
【C++】 --- C++函数后面加const修饰符
104 0