当我们使用 var 和 let 来声明变量时,它们在作用域和变量提升方面的差异会产生一些不同的结果。下面是一个示例来说明这些差异。

// 使用 var 声明变量
function varExample() {
console.log(x); // 输出 undefined
var x = 10;
console.log(x); // 输出 10
if (true) {
var x = 20;
console.log(x); // 输出 20
}
console.log(x); // 输出 20
}
varExample(); // 使用 let 声明变量
function letExample() {
console.log(y); // 抛出 ReferenceError: y is not defined 错误
let y = 10;
console.log(y); // 输出 10
if (true) {
let y = 20;
console.log(y); // 输出 20
}
console.log(y); // 输出 10
}
letExample();

在上述示例中,我们分别使用 var 和 let 声明了变量 x 和 y。我们可以看到以下不同之处:

变量提升:使用 var 声明的变量 x 在整个函数作用域中都是可见的,因此在第一个 console.log(x) 中输出 undefined,而不是抛出错误。这是因为变量 x 被提升到作用域的顶部,但其赋值操作在后面的语句中才执行。而使用 let 声明的变量 y 不会发生变量提升,因此在第一个 console.log(y) 中抛出了 ReferenceError 错误。

块级作用域:在 if 语句块中,使用 var 声明的变量 x 覆盖了外部作用域中的 x,导致在第三个 console.log(x) 中输出 20。这是因为 var 声明的变量只有函数作用域,没有块级作用域的概念。而使用 let 声明的变量 y 存在块级作用域,在 if 语句块中声明的 y 不会影响外部作用域中的 y,因此在第三个 console.log(y) 中输出的是外部作用域中的值 10。

通过这个示例,我们可以清楚地看到 var 和 let 在作用域和变量提升方面的差异。使用 let 声明变量可以更好地控制作用域,并避免一些意外的错误。因此,在现代 JavaScript 开发中,推荐优先使用 let 来声明变量。

demo阐述js中let和var 的不同的更多相关文章

  1. JS中let和var的区别

    js中let和var定义变量的区别   let变量之前没见过,刚遇到,探探究竟. 以下转自:http://blog.csdn.net/nfer_zhuang/article/details/48781 ...

  2. js中 慎用for(var o in arrays) 遍历数组,for(var i,i< objects.length;i++)与for(var i,n = objects.length;i<n;i++) 的性能区别

    原文:js中 慎用for(var o in arrays) 遍历数组,for(var i,i< objects.length;i++)与for(var i,n = objects.length; ...

  3. 第28篇 js中let和var

      let与var 在js中声明一个变量除了一个var 还有一个let的声明.对于var 在前面的作用域中已经讲过,这次主要说下二者的区别: 在MDN上有这样的一个demo: var list = d ...

  4. JS中const、var 和let的区别

    今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...

  5. js中let和var的区别 不懂得加QQ 2270312758

    js中使用let定义变量的时候,是需要使用严格模式的,我看到网上有的博客说:如果在不使用严格模式的情况下,使用let会报错,但是在实验的过程中,我直接定义了let变量而且也没有使用严格模式,并没有报任 ...

  6. js中的let\var\const

    在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...

  7. 如何HTML标签和JS中设置CSS3 var变量

    一.HTML标签中设置CSS变量 如下: <div style="--color: #cd0000;"> <img src="mm.jpg" ...

  8. 关于js中的for(var in)遍历属性报错问题

    之前遇到过这个问题,但是没找到问题的所在,将for(var i in  array){} 改成了for(var i ;i<array.length;i++)循环,但是今天又遇到了,mark一下错 ...

  9. js中let和var定义变量的区别

    let变量之前没见过,刚遇到,探探究竟. 以下转自:http://blog.csdn.net/nfer_zhuang/article/details/48781671 声明后未赋值,表现相同 (fun ...

  10. ts和js中let和var定义变量的区别

    javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是”JavaScript 严格模式”,比如下述的代码运行就会报错: let hello = 'hello worl ...

随机推荐

  1. 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体的替代品,可本地部署+知识库,注册即可有750w的token使用

    最近火山引擎推出了自家联网版的DeepSeekR1,并且加入了联网的功能,不用担心DeepSeek本体的服务器繁忙了,可以说直接是DeepSeek本体的替代品.现在注册即送30块体验价(相当于750w ...

  2. autMan奥特曼机器人-内置容器安装依赖报错:externally-managed-environment

    在 Manjaro 22.Ubuntu 23.04.Fedora 38 等最新的linux发行版中运行pip install时,通常会收到一个错误提示:error: externally-manage ...

  3. Typecho去除更新检测和后台日志

    Typecho去除官方日志 打开 admin/index.php,找到下面的代码并删除,在 93-102 行. 代码: <div class="col-mb-12 col-tb-4&q ...

  4. TIDB 数据库架构概述

    学习目标 题解数据库整体架构 了解 TiDB Server .TiKV.TiFlash.和 PD 的主要功能 文章末尾获取笔记.视频资料,持续更新 体系架构 水平扩容或者缩容 金融级高可用 实时 HT ...

  5. 别再混淆了!JVM内存模型和Java内存模型的本质区别

    JVM 内存模型(JVM Memory Model)和 Java 内存模型(Java Memory Model, JMM)是 Java 开发中两个非常重要的概念,但这两个概念很容易被搞混,所以本文就来 ...

  6. manim边学边做--局部缩放的场景类

    在动画制作中,尤其是数学和科学可视化领域,有时我们需要将观众的注意力集中在场景的某个特定部分. Manim提供了一个强大的工具 ZoomedScene,它允许我们在场景中创建一个独立的缩放视图,从而实 ...

  7. 【数值计算方法】蒙特卡洛方法积分的Python实现

    原理不做赘述,参见[数值计算方法]数值积分&微分-python实现 - FE-有限元鹰 - 博客园,直接上代码,只实现1d,2d积分,N维积分的蒙特卡洛方法也类似. 代码 from typin ...

  8. minecraft mods descrip

    1. [Advanced Finders]矿物探测器 mod 显示玩家周围附近矿石的方向(指针显示水平面上可到达的矿石) 探测地下深部矿脉(箭头显示最近矿脉的方向(上/下)) 发现大型矿床时发出信号( ...

  9. 搭建个人多机器ssh连接平台

    最近新配了个主机,有了多个设备,ssh连接的功能可以优化很多体验,便又开始鼓捣.以前都是windows连各种linux,比较方便:这次是在windows之间,还是小查了好一会儿,留个记录 SSH连接的 ...

  10. nuxtjs 自定义服务端错误页面 Server error page

    原文链接:https://blog.jijian.link/2020-12-03/nuxtjs-server-error-page/ 当 nuxt 项目在生产环境运行时,如果服务端运行出错,比如 as ...