es6学习(一):变量声明的方式对比:var,let,const

news2024/11/26 3:50:16

前言

在let和const出现之前,js可以使用var为变量命令,如果是函数也可以用function命名,甚至你可以直接不用任何关键字命名

        var a = 1
        function fn() { }
        b = 2

        console.log(a)
        console.log(fn)
        console.log(b)

结果如下

var的特性

1.window环境下,var在最外层定义的变量会直接赋值给window

        var abc = '哈哈哈'
        console.log(window.abc,'var之后我在window上')

2.可以重复命名

        var abc = null
        console.log(abc,'赋值为null')
        var abc = 111
        console.log(window.abc,'赋值数字')

3.会变量提升

        console.log(abc,'赋值之前')
        var abc = '初始化数据'
        console.log(abc,'赋值以后')

4.可以先声明再赋值

        var abc
        console.log(abc,'声明')
        abc = 'wjt'
        console.log(abc,'赋值')

 

5.可以使用单变量模式

        var a ,b ,c
        a = 1
        b = 2
        c = 3

let的特性

1.不会变量提升

        console.log(abc)
        let abc = 'wjt'

这句话的翻译是:初始化之前无法访问'abc'

2.不可以重复命名

        let abc = 1
        let abc = 2

这句话的翻译是:'abc'已被声明

3.可以先声明再赋值

        let abc
        console.log(abc,'声明')
        abc = 'wjt'
        console.log(abc,'赋值')

 

4.可以使用单变量模式 

         let a,b,c
         console.log(a,b,c,'单变量')

 

const的特性

1.不会变量提升

和let一样,这里不展示了

2.不可以重复命名

和let一样,这里不展示了

3.不可以修改值

基础类型
        const abc = 'wjt'
        abc = 'Wjt'
        console.log(abc)

 这句话的翻译是:对常量变量赋值。

引用类型
        const arr = [1,2,3]
        arr = [2,3,4]

        const obj = {name:'wjt'}
        obj = {name:'Wjt'}

但是,我们可以修改引用类型内部的属性,因为引用类型赋值的是一个内存地址,你修改地址值会报错,但是修改内存地址里的属性不会报错,如下

        const arr = [1,2,3]
        arr.push(4)

        const obj = {name:'wjt'}
        obj.name = 'Wjt'
        console.log(arr,obj)

 

4.不可以只声明不赋值

const abc

 

 这句话的翻译是:在const声明中缺少初始化式

5.不可以使用单变量模式

 面试

1.var let const的区别

var=>let和const

1.var有声明提升,而let和const没有

2.var在作用域内没有暂时性死区,let和const有

3.var可以对变量进行重复声明,let和const不行

4.window环境中,var在最外层定义的值会赋值给window,let和const不会

5.var没有块级作用域,let和const有块级作用域

var和let=>const

1.var和let声明的变量可以修改值,const一般声明常量,值不可以修改

2.var和let都可以先声明,再赋值,const不行

3.var和let都可以使用单变量模式,const不行

let=>const

let声明的是变量值,const声明的一般为常量值

2.经典循环中对比var和let

普通循环
        for(var a = 0;a<3;a++){
            console.log(a,'常规for循环var定义')
        }
        for(let b = 0;b<3;b++){
            console.log(b,'常规for循环let定义')
        }
        for(const c = 0;c<3;c++){
            console.log(c,'常规for循环const定义')
        }

var和let可以正常输出,变量值也可以被正常增加,const就不行,因为const是不可以修改的

循环加定时器
        for(var a = 0;a<3;a++){
            setTimeout(()=>{
                console.log(a,'循环定时器var定义')
            })
          
        }
        for(let b = 0;b<3;b++){
            setTimeout(()=>{
                console.log(b,'循环定时器let定义')
            })
        }

那是因为var没有块级作用域,循环是同步任务,循环执行完了才开始执行定时器,这个时候a早已经被改成3了,所以每次输出都是3

let有块级作用域,每次执行完毕,for内部的b都会被保存一份,所以每次循环完毕之后的值我们都能输出出来。

        for(var a = 0;a<3;a++){
            console.log(a,'我不在定时器内')
            setTimeout(()=>{
                console.log(a,'循环定时器var定义')
            })
        }

        for(let b = 0;b<3;b++){
            console.log(b,'我不在定时器内')
            setTimeout(()=>{
                console.log(b,'循环定时器let定义')
            })
        }

什么是块级作用域?答曰:大括号就代表一层块级作用域(这么描述不是特别准确,有些大括号就不是(比如对象的大括号),作用域内会说,这里不陈述)

3.js中声明变量的方式(7种)

1.啥关键也不用,例如直接a=1

2.var声明

3.let声明

4.const声明

5.function声明函数

6.class声明类

7.import声明,例如import data from './data.js'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1319463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UML】组件图中的供需接口与面向对象中的接口

UML&#xff08;统一建模语言&#xff09;组件图中的“供接口”&#xff08;Provided Interface&#xff09;和“需接口”&#xff08;Required Interface&#xff09;与面向对象编程中的接口概念有关联&#xff0c;但它们在应用上有所区别。 下面解释两者的关系&#xff1a; …

SIGGRAPH 2022 | 筷子该怎么用? ——基于贝叶斯优化和强化学习的灵巧手握筷及控制方法

使用仿生手灵巧地操作工具一直是计算机动画和机器人方向的一个长期具有挑战性的问题。工具使用的主要困难包括&#xff1a;手的高自由度&#xff1b;工具的欠驱动&#xff1b;以及手、工具和物体之间复杂的相互作用。操作的困难程度也取决于所涉及的工具类型。有些工具只需要牢…

【MATLAB源码-第100期】基于matlab的OFDM系统papr抑制算法对比,clipping,PTS,SLM。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 OFDM&#xff08;正交频分复用&#xff09;系统中&#xff0c;高峰均值功率比&#xff08;PAPR&#xff09;的抑制是一项关键技术&#xff0c;有助于提高信号的功率效率和传输质量。主要的PAPR抑制算法包括削波&#xff08;C…

2023 亚马逊云科技 re:lnvent 大会探秘: Amazon Connect 全渠道云联络中心

2023 亚马逊云科技 re:lnvent 大会探秘: Amazon Connect 全渠道云联络中心 前言一. Amazon Connect 介绍 &#x1f5fa;️二. Amazon Connect 使用教程 &#x1f5fa;️1.我们打开URl链接找到对应服务2.输入Amazon Connect选中第一个点击进入即可&#xff1b;3.在进入之后我们就…

实时抠像系统

实时抠像系统 先上效果图 实时抠像&#xff0c;不替换背景 实时抠像&#xff0c;并替换背景 随着直播用户的人数增加&#xff0c;实时抠像的市场需求也越来越多&#xff0c;为了满足市场需求&#xff0c;写了一个程序&#xff0c;可实现抠像&#xff0c;也可以实时换视频背景…

FPGA实现 TCP/IP 协议栈 客户端 纯VHDL代码编写 提供4套vivado工程源码和技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐我这里已有的以太网方案1G 千兆网 TCP-->服务器 方案10G 万兆网 TCP-->服务器客户端 方案常规性能支持多节点FPGA资源占用少数据吞吐率高低延时性能 4、TCP/IP 协议栈代码详解代码架构用户接口代码模块级细讲顶层模块PA…

DVWA靶场的设置

1).在win 10系统安phpstudy2016&#xff0c;如图所示 2&#xff09;创建DVWA的靶场&#xff0c;解压DVWA-master.zip到C:\phpStudy\WWW\DWA-master 3&#xff09;配置DVWA链接数据库 右键选择记事本打开configlconfig.inc.php.dist【也可以使⽤其他编辑⼯具打开】&#xff0c;…

实现树形结构的插件vue-tree-color及元素放大缩小拖动

实现流程图,借鉴vue-tree-color 引入依赖 npm install vue-tree-color 同时查看项目中是否已安装less和less-loader,因为该组件使用到less npm install --save-dev less less-loader 如果这里启动项目报错,有可能是less和less-loader的版本过高,可以降低版本,或者指定版本号…

搭建Flutter开发环境、从零基础到精通(文末送书【北大出版社】)

目录 搭建开发环境 1. 下载Flutter SDK 2. 设置镜像地址及环境变量 3. 安装与设置Android Studio 4. 安装Visual Studio Code与Flutter开发插件 5. IDE的使用和配置 6. 安装Xcode 7. 检查Flutter开发环境 好书推荐 内容简介 作者简介 搭建开发环境 Flutter可以跨平…

5款不可或缺的办公软件,好用且使用频率超高,几乎每个人都需要

在当今数字化时代&#xff0c;办公软件成为了现代职场必备的工具。这些软件可以大大提高我们的办公效率&#xff0c;简化工作流程&#xff0c;使我们更加高效地完成任务。今天给大家分享5款不可或缺的办公软件&#xff0c;它们不仅好用&#xff0c;而且使用频率极高&#xff0c…

使用Gensim训练Word2vec模型

import gensim import jieba import re import warnings import logging warnings.filterwarnings(ignore)with open("dataset/sanguo.txt", r,encodingutf-8)as f: # 读入文本lines []for line in f: #分别对每段分词temp jieba.lcut(line) #结巴分词 精确模式wo…

股票价格预测 | Python实现基于Stacked-LSTM的股票预测模型,可预测未来(keras)

文章目录 效果一览文章概述模型描述源码设计效果一览 文章概述 以股票价格预测为例,基于Stacked-LSTM的股票预测模型(keras),可预测未来。 模型描述 LSTM 用于处理序列数据,如时间序列、文本和音频。相对于传统的RNN,LSTM更擅长捕获长期依赖关系,

C# WPF上位机开发(ExtendedWPFToolkit扩展包使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 虽然个人人为当前的c# wpf内容已经足够多&#xff0c;但是肯定还是有很多个性化的需求没有满足。比如说不够好看&#xff0c;比如说动画效果不好&a…

【C++】POCO学习总结(十八):XML

【C】郭老二博文之&#xff1a;C目录 1、XML文件格式简介 1&#xff09;XML文件的开头一般都有个声明&#xff0c;声明是可选 <&#xff1f;xml version"1.0" encoding"UTF-8"?>2&#xff09;根元素&#xff1a;XML文件最外层的元素 3&#xff…

不同vlan设备互通案例操作介绍

目录 一、案例示图需求 1. 示图 2. 需求 二、操作演示 1. 接入层交换机SW4、SW5划分vlan 2. 汇聚层交换机SW2、SW3配置IP作为vlan网关、与SW1直连 3. 核心交换机SW1配置IP与汇聚交换机、R1直连 4. SW1、SW2、SW3、R1配置静态路由&#xff0c;使得vlan10、vlan20、172网…

Vue项目使用WebAssembly之后,Nginx如何解决WebAssembly不支持的问题

在VUE项目中使用WebAssembly之后&#xff0c;打包的项目会出现下面的错误 Uncaught (in promise) TypeError: WebAssembly: Response has unsupported MIME type application/wasm; charsetutf-8 expected application/wasm 可以用以下办法解决 一&#xff1a;单独Nginx配置…

YK3150滚齿机电池式绝对编码器电压过低导致丢失多圈数据,如何清多圈

当驱动器电池没电了&#xff0c; 就会报警如下 C轴驱动器&#xff1a;041&#xff08;0x29&#xff09; 电池式绝对编码器电压过低导致丢失多圈数据 此时需要换电池后&#xff0c;进行【清多圈】操作&#xff0c;先把【伺服参数开关】打开&#xff08;一定要记得&#xff09…

Pycharm 如何更改成中文版| Python循环语句| for 和 else 的搭配使用

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

音视频:Ubuntu下安装 FFmpeg 5.0.X

1.安装相关依赖 首可选一&#xff1a; sudo apt-get update sudo apt-get install build-essential autoconf automake libtool pkg-config \libavcodec-dev libavformat-dev libavutil-dev \libswscale-dev libresample-dev libavdevice-dev \libopus-dev libvpx-dev libx2…

自动化测试Selenium node 配置

查看自己chrome浏览器的版本 下载chromedriver对应版本&#xff0c;下载当前版本中最大版本。 https://npm.taobao.org/mirrors/chromedriver 安装java jdk &#xff0c;版本至少1.7, 并配置jdk环境变量 以下2个文件放在同一个目录下 Cmd地址切换到第四点目录下&#xff0c;然…