ES6新特性:let关键字详解

文章目录

  • [1 声明提升](#1 声明提升)
  • [2 作用域](#2 作用域)
  • [3 重复声明](#3 重复声明)

在JavaScript中,letvar 都是声明变量的关键字,但在用法和作用域方面有一些区别。

let 是ES6引入的新的声明变量的关键字,它与 var 相比,更加严格,语法更加规范,并且可以避免一些常见的错误。

1 声明提升

  • let 不存在变量提升

    使用var关键字声明的变量会被提升到当前作用域的顶部,而使用let声明的变量不会。所以,使用var声明的变量可以在声明之前使用,但是使用let声明的变量必须在声明之后使用。

html 复制代码
<!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>ES6新特性:let关键字</title>
</head>

<body>
    <script>
        console.log('myVar:', myVar);    //myVar: undefined
        var myVar = '我是var声明的变量';
        console.log('myVar:', myVar);    //myVar: 我是var声明的变量

        console.log('myLet:', myLet);    //报错,Cannot access 'myLet' before initialization
        let myLet = '我是let声明的变量';
        console.log('myLet:', myLet);    //myLet: 我是let声明的变量
    </script>
</body>

</html>

2 作用域

  • let声明的变量具有块级作用域

    使用var声明的变量有函数作用域或全局作用域,而使用let声明的变量有块级作用域。

    块级作用域是指变量只在定义它们的块内部可见。这意味着,使用let声明的变量只能在声明它的块级作用域内使用,而不会影响外部作用域。

html 复制代码
<!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>ES6新特性:let关键字</title>
</head>

<body>
    <script>
        {
            var myVar = '我是var声明的变量';
            let myLet = '我是let声明的变量';
        }
        console.log('myVar:', myVar);    //myVar: 我是var声明的变量
        console.log('myLet:', myLet);    //报错:myLet is not defined
    </script>
</body>

</html>

3 重复声明

  • let 不允许重复声明变量

    使用var声明的变量可以被重复声明,而使用let声明的变量不能被重复声明。

    重复声明是指在同一个作用域内,使用相同的变量名再次声明变量。如果使用var声明同名变量,则会覆盖之前的声明。如果使用let声明同名变量,则会抛出下面的错误。

    html 复制代码
     Identifier 'myLet' has already been declared



总之,以后声明变量,用 let 就对了!

相关推荐
LinXunFeng16 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
乘风gg20 小时前
为什么AI 时代来临,大部分人吃不到红利
前端·ai编程·claude
恋猫de小郭21 小时前
Android 限制侧载新进展,谷歌联合国内厂商推验证计划
android·前端·flutter
IT_陈寒21 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
恋猫de小郭21 小时前
解读 Android 17 全新内存限制,有没有“豁免”后门?
android·前端·flutter
Hyyy1 天前
理解LLM的基本工作原理:预训练、微调、推理的区别
前端
Gatlin1 天前
前端逆向与反逆向:一场猫鼠游戏的底层逻辑与实战
前端
Pedantic1 天前
本地通知(Local Notifications)学习笔记
前端
森蓝情丶1 天前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
爱勇宝1 天前
干了近 8 年,一夜之间被裁:AI 时代,程序员最该害怕的不是 AI
前端·后端·程序员