【JS学习】var let const声明变量的异同点

前言:

本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享。不足之处也欢迎指正,作者会积极思考与改正。

总述

js中有三种声明变量的方法:var,let,const。他们各自有各自的有特点。

声明格式 声明 变量提升 作用域 是否存在于windows对象中
var a="abc"; 变量 全局或者函数内部
let b="abc"; 变量 块区域以及向下兼容或者函数内部
const c="anc"; 常量(但引用类型依然可可变) 块区域以及向下兼容或者函数内部

案列

实践出真知

  1. 变量提升

    所谓变量提升是指:在执行js代码时,编译器会预先将声明变量的语句执行(与let,const的区别)

    //案列一:
    
        a="123";//此处不会报错,因为编译器会先执行var a语句,再执行此句
    var a;
    console.log(a);//123 b="123";//此处会报错,因为初始化前无法访问“b”
    let b;
    console.log(b);//123 c="123";
    const c;//此处会报错,因为常量声明中缺少初始值设定项
    console.log(c);//123 //案例二:if(false)里面的var语句也会执行
    var a = "1";
    function hd() {//此处会先执行if内部的var a
    if (false) {
    var a = "0";
    }
    console.log(a);//输出undefine
    }
    hd(); let a = "1";//向下兼容的块作用域
    function hd() {//不会先执行if内部的let a
    if (false) {
    let a = "0";
    }
    console.log(a);//输出1
    }
    hd(); const a = "1";
    function hd() {//不会先执行if内部的const a
    if (false) {
    const a = "0";
    }
    console.log(a);//输出1
    }
    hd();
  2. 作用域:var存在于最近函数或者全局作用域中(没有块作用域)

    //案列一:正常语句中(与let,const的区别)
    var i=-1;
    for(var i=0;i<4;i++){ }
    console.log(i);//此处会打印4 因为var定义的变量具有全局作用域 let i=-1;
    for(let i=0;i<4;i++){//此处的let只会作用在{}块域内 }
    console.log(i);//此处会打印-1 因为let定义的变量具有块作用域 const a=-1;
    for(let i=0;i<4;i++){
    const a=1;//此处的const只会作用在{}块域内 }
    console.log(a);//此处会打印-1 //案列二:函数内部(let,const都是这样)
    var a=1;
    function test(){
    var a=2;
    console.log(a);//函数内部打印2;在方法内部全局作用 }
    test();
    console.log(a);//依然打印1 函数内部不影响外部 let a=1;
    function test(){
    let a=2;
    console.log(a);//函数内部打印2;在方法内部全局作用 }
    test();
    console.log(a);//依然打印1 函数内部不影响外部 const a=1;
    function test(){
    const a=2;
    console.log(a);//函数内部打印2;在方法内部全局作用 }
    test();
    console.log(a);//依然打印1 函数内部不影响外部
  3. var的全局变量会存储在windows对象中(与let,const的区别)

    		var a=1;
    console.log(window.a);//输出1 let a=1;
    console.log(window.a);//输出undefined const a=1;
    console.log(window.a);//输出undefined
  4. const定义常量 但注意当为引用类型时依然可以改变

    	const a=1;
    a=2;//报错,不可重复赋值 const a=[1,2,3];
    a[1]=1;
    console.log(a);//输出[1,2,3],可用freeze方法冻结

尾记

有任何问题,欢迎私聊哟~~~

也可关注公众号“诗与凉风”联系作者哦~~

【JS学习】var let const声明变量的异同点的更多相关文章

  1. 浅谈JS中 var let const 变量声明

    浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...

  2. var、let、const声明变量的区别

    let和var声明变量的区别:1.let所声明的变量只在let命令所在的代码块内有效.(块级作用域) for(let i=0;i<10;i++){ // ... } console.log(i) ...

  3. let、var、const声明的区别

    前言 看了方应杭老师的一篇解释let的文章,对JavaScript中的声明有了深刻的理解,这里也就有了总结一下JavaScript中各种声明之间区别的这篇文章. JavaScript中变量声明机制 首 ...

  4. 深度理解js中var let const 区别

    首先要理解js中作用域的概念 作用域:指的是一个变量的作用范围 1.全局作用域 直接写在script中的js代码,在js中,万物皆对象,都在全局作用域,全局作用域在页面打开时创建,在全局作用域中有一个 ...

  5. ES6 let const 声明变量 块级作用域

    ES6 中除了使用 var 定义变量,还有let.const,定义变量. function getValue(condition){ console.log(typeof value2); // un ...

  6. JS学习笔记(二)变量、作用域及内存问题

    一.基本类型和引用类型的值 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值:简单的数据段. 引用类型值:可能由多个值构成的对象. 当将一个值赋给变量时,解析器必须确定这个值是基 ...

  7. HttpRunner学习5--使用variables声明变量

    前言 在HttpRunner中,如果需要声明变量,可以通过关键字 variables 来完成,要引用声明的变量,则是通过 $+变量名 (如 $token )来实现.variables 可以在 conf ...

  8. Javascript 基础学习(三)js 的原始类型和声明变量

    java的基本数据类型一共有 byte short int long float double char boolean js中定义变量使用关键字 var js的原始类型(五个) String: 字符 ...

  9. js中使用const声明变量时需要注意

    const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址(初始化的内容)不得改动.对于简单类型的数据(数值.字符串.布尔值),值就保存在变量指向的那个内存地址,因此等同于常量. 简单 ...

随机推荐

  1. 深入理解Java虚拟机(八)——类加载机制

    是什么是类加载机制 Java虚拟机将class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程就是类加载机制. 类的生命周期 一个类从加载到内存 ...

  2. 七牛云SDKLinux环境下C SDK的编译(转)

    1.下载代码到本地 git clone https://github.com/qiniu/c-sdk.git 如果国外下载速度慢,可以用码云的镜像库 git clone https://gitee.c ...

  3. USB接口禁用小工具v1.0.1

    由论坛用户原创制作的一个USB接口工具, 可选择手动/自动启动或者禁止启动模式, 开启禁止启动模式后USB接口将关闭识别功能, 有效防止U盘设备侵入,对于机房实验室设施来说相当管用. 下载地址:htt ...

  4. Linux Vi进入编辑模式后使用方向键的时候,并不会使光标移动,而是在命令行中出现A、B、C、D四个字母

    在linux下,初始使用Vi的时候有两个典型的问题: 1.在编辑模式下使用方向键的时候,并不会使光标移动,而是在命令行中出现A.B.C.D四个字母: 2.当编辑出现错误,想要删除时,发现Backspa ...

  5. JavaScript中遍历的几种方法

    1.while循环 while后面跟循环条件和执行语句,只要满足条件,就会一直执行里面的执行 var i = 0 while(){ console.log(i) i++ } 2.do...while循 ...

  6. Loading class `com.mysql.jdbc.Driver'. This is deprecated警告处理

    com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别 mysql客户端6以后,数据库驱动com.mysql.jdbc.Driver'已经被弃用了.应当 ...

  7. MySQL锁(四)行锁的加锁规则和案例

    在上一篇文章,我们学习了间隙锁和next-key lock,但是不知道怎么加锁,有哪些规则.间隙锁的概念不太好理解,尤其是配合上行锁后,很容易在判断是否会出现锁等待的问题上犯错. 今天我们就来学习一下 ...

  8. GitBook简单的使用

    GitBook 是一个基于 Node.js 的命令行工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML.PDF.eBook 等格式的电子书. 使用 GitBook 管 ...

  9. kafka rebalance解决方案 -incremental cooperative协议和static membership功能

    apache kafka的重平衡(rebalance),一直以来都为人诟病.因为重平衡过程会触发stop-the-world(STW),此时对应topic的资源都会处于不可用的状态.小规模的集群还好, ...

  10. Spring Cloud 2020.0.0 正式发布,全新颠覆性版本!

    Spring Cloud 2020.0.0 没错,Spring Cloud 2020.0.0 正式发布了: 感谢Java技术栈群友通知,想入群的在公众号Java技术栈后台回复:wx,正在使用 Spri ...