精华内容
下载资源
问答
  • 一、var声明的变量会挂载在window上,而let和const声明的变量不会: 二、var声明变量存在变量提升,let和const不存在变量提升 三、let和const声明形成块作用域 四、同一作用域下let和const不能声明同名变量,...

    也是从别人那儿抄来的,加以整理和个人理解!,因为感觉以后也会用的上,所以整理一下以后再有研究还会更新!!!

    • 一、var声明的变量会挂载在window上,而let和const声明的变量不会:

    • 二、var声明变量存在变量提升,let和const不存在变量提升
      什么是变量提升?
      JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
      JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

    • 三、let和const声明形成块作用域
      顾名思义,就是只在当前代码块或者方法中起作用!!

    • 四、同一作用域下let和const不能声明同名变量,而var可以

    • 五、暂存死区

    • 六、const

        	*   1、一旦声明必须赋值,不能使用null占位。
        	
        	*   2、声明后不能再修改
        	
        	*   3、如果声明的是复合类型数据,可以修改其属性
        	**
      

    简单的Demo

    for (let i = 0; i < 5; i++) {
        console.log(i)
    }
    

    上面的代码我们知道打印结果是 0, 1, 2, 3, 4,但是你们有没有想过这个变量i的作用域到底是什么呢?

    有人说在这个for循环里呀,但是我这里想说的是这个i作用域是在括号()里。正常的代码是这样的:

    1.首先这个变量_i的作用域是在()里才有效的,循环体里是不能访问到_i的
    2.每次循环的时候创建一个i变量,将括号里的_i赋值到变量i上
    3.最后i++后再将变量i的值赋值回_i上

    当然这个过程是很复杂的,可以用下面代码理解,但是JS的实现机制是很复杂的,这里想要说明的let i的作用域有时候并不是我们所理解的那样的。

    for (let _i = 0; i < 5; i++) {
        let i = _i
        console.log(i)
        // i++ 先做
        _i = i
    }
    

    细节

    一、var声明的变量会挂载在window上,而let和const声明的变量不会:
    var a = 100;
    console.log(a,window.a);    // 100 100
    
    let b = 10;
    console.log(b,window.b);    // 10 undefined
    
    const c = 1;
    console.log(c,window.c);    // 1 undefined
    
    二、var声明变量存在变量提升,let和const不存在****变量提升
    console.log(a); // undefined  ===>  a已声明还没赋值,默认得到undefined值
    var a = 100;
    console.log(b); // 报错:b is not defined  ===> 找不到b这个变量
    let b = 10;
    console.log(c); // 报错:c is not defined  ===> 找不到c这个变量
    const c = 10;
    
    三、let和const声明形成块作用域
    if(1){
        var a = 100;
        let b = 10;
    }
    
    console.log(a); // 100
    console.log(b)  // 报错:b is not defined  ===> 找不到b这个变量
    if(1){
    
        var a = 100;
            
        const c = 1;
    }
     console.log(a); // 100
     console.log(c)  // 报错:c is not defined  ===> 找不到c这个变量
    

    四、同一作用域下let和const不能声明同名变量,而var可以

    var a = 100;
    console.log(a); // 100
    
    var a = 10;
    console.log(a); // 10
    复制代码
    let a = 100;
    let a = 10;
    
    //  控制台报错:Identifier 'a' has already been declared  ===> 标识符a已经被声明了。
    

    五、暂存死区
    复制代码

    var a = 100;
    
    if(1){
        a = 10;
        //在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a,
        // 而这时,还未到声明时候,所以控制台Error:a is not defined
        let a = 1;
    }
    

    六、const

    /*
    *   1、一旦声明必须赋值,不能使用null占位。
    *
    *   2、声明后不能再修改
    *
    *   3、如果声明的是复合类型数据,可以修改其属性
    *
    * */
    
    const a = 100; 
    
    const list = [];
    list[0] = 10;
    console.log(list);  // [10]
    
    const obj = {a:100};
    obj.name = 'apple';
    obj.a = 10000;
    console.log(obj);  // {a:10000,name:'apple'}
    
    展开全文
  • var和let和const

    2021-05-10 15:46:38
    var和let和const var和let的使用: 在ES5中,if for的都没有作用域,想要有作用域必须要借助function的作用域(ES5中只有function有作用域 <!DOCTYPE html> <html lang="en"> <head> <meta...

    var和let和const

    var和let的使用:

    在ES5中,if 和for的都没有作用域,想要有作用域必须要借助function的作用域(ES5中只有function有作用域

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
        <button>1</button>
        <button>2</button>
        <button>3</button>
        <button>4</button>
        <button>5</button>
    </body>
    <script src="let和const.js"></script>
    
    </html>
    
    {
        var func;
        if (true) {
            var name = 'why';
            func = function () {
                console.log(name);
            }
            // func()
        }
        name = 'what'
        //在中间可以修改name的值
        //ES5的缺陷
        func()
        // if 的块级作用域必须要借助function
    }
    
    

    在下面代码的第 10 行中的var i = 1,在所有地方的i都会赋值为 1,无论在括号内还是括号外都是 1

    {
        // for块级作用域必须要借用function
        var btns = document.getElementsByTagName('button')
        // for(var i = 0; i <btns.length;i++){
        //     btns[i].addEventListener('click',function(){
        //         console.log('第'+i +'个按钮被点击');
        //     })
        // }
      
        for (var i = 0; i < btns.length; i++) {
            (function (num) {
                btns[i].addEventListener('click', function () {
                    console.log('第' + num + '个按钮被点击');
                })
            })(i)
            //而闭包可以实现,因为函数自己有自己的作用域,不会受外面的影响,只找属于自己的i
    
        }
    } 
    
    {
        console.log('-------ES6定义的let有块级作用域');
        let btns = document.getElementsByTagName('button');
        for (let i = 0; i < btns.length; i++) {
            btns[i].addEventListener('click', function () {
                console.log('第' + i + '个按钮被点击');
            })
        }
    
    }
    

    var和let的使用的范例

    var a = [];
    for (var i = 0; i < 10; i++) {
        a[i] = function () {
            console.log(i);
        };
    }
    a[6]()
    

    输出10

    若将var改成let
    var a = [];
    for (let i = 0; i < 10; i++) {
        a[i] = function () {
            console.log(i);
        };
    }
    a[6]()
    

    输出6

    for (let f = 0; f < 3; f++) {
        let f = 'abc';
        console.log(f);
    }
    

    var 命令会发生“变量提升”现象, 即变量可以在声明之前使用,值为 undefined 。声明了未初始化

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

    ​ 两个let或是一个let一个var会报错

    {
        var fn = [];
        for (let i = 0; i < 5; i++) {
            fn[i] = function (x) {
                return x * i;
            };
        }
        console.log(fn[2](10));
    }
    

    输出20,若改为var ,则输出50

    const的用法

    一旦给const修饰的标识符被赋值后,不能修改

    const name = 'why'
     name = 'abc'
    

    在使用const 定义标识符,必须进行赋值

      const name,//直接写会报错
    

    常量的含义是指向的对象不能修改,但是可以改变对象内部的属性

    const obj = {
            name: 'whr',
            age: 18,
            height: 1.55
            }
        obj.name = 'ww';
        obj.age = 22;
        console.log(obj);
    

    对象字面量的增强写法

    ES5的写法

    const name = 'wwww';
        const age = 22;
        const height = 1.5
        //ES5的写法
        const obj = {
            name: name,
            age: age,
            height: height,
            run: function () {
                console.log('running1');
            },
            eat: function () {
                console.log('eating1');
            }
    
        }
        console.log(obj);
    

    ES6的语法糖

        //ES6的写法
        const obj = {
            name,
            age,
            height,
            run() {
    
            },
            eat() {
    
            }
        }
        console.log(obj);
    
    展开全文
  • 文章目录let const var1、变量的提升2、var 没有作用域限制,let 有3、var 可以重复声明,let 不行4、const 可以用来声明常量 let const var 在 ES6 之前,js 中的变量声明,都是使用 var 的 但是,var 有如下...

    let const 和 var

    在 ES6 之前,js 中的变量声明,都是使用 var 的

    但是,var 有如下几个问题:

    • var存在变量提升
    • var可以重复声明变量
    • var不支持块级作用域
    • var不能用于定义常量

    如今,在 ES6中,多出了 let 和 const 两个声明方式


    1、变量的提升

    可以看到,let 类型对于后端程序员是十分友好的

    变量提升


    2、var 没有作用域限制,let 有

    let 的作用域,和 java 类似,这里就不再赘述了

    作用域限制


    3、var 可以重复声明,let 不行

    这里可以看出 ,let 还是符合后端程序员的习惯的

    var 重复声明

    let不能重复声明


    4、const 可以用来声明常量

    对于基础类型,比如数字,字符串,const 声明的是常量,初次使用必须初始化,且后面不能再更改其值

    常量不能修改

    但是 const 类型声明的对象,可以修改其属性值,可还是不能修改其引用:

    这和 java 可能有一些小区别,但是,我们以后在声明对象的时候,还是会使用 const

    const 修饰对象

    展开全文
  • varlet和const之间的区别 区别一: var声明的变量存在变量提升,即变量可以在声明之前调用,值为undefined。 let和const不存在变量提升问题,即它们所声明的变量一定要在声明后使用,否则报错。 区别二: var不...

    var,let和const之间的区别

    区别一:

    var声明的变量存在变量提升,即变量可以在声明之前调用,值为undefined。
    let和const不存在变量提升问题,即它们所声明的变量一定要在声明后使用,否则报错。

    区别二:

    var不存在块级作用域,
    let和const存在块级作用域

    区别三:

    var允许重复声明变量,
    let和const在同一作用域不允许重复声明变量

    其中const声明一个只读的常量(因为如此,其声明时就一定要赋值,不然报错)。
    一旦声明,常量的值就不能改变
    但是,如果const声明了一个对象,对象里的属性是可以改变的。代码如下:

    const obj={
       name:'小明'};
    obj
    展开全文
  • varletconst的区别

    2021-10-29 16:21:31
    var 关键词 1. var声明作用域 var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问 function test() { var message = "hello world"; // 局部变量 } test(); console.log(message); // 报错 函数test()...
  • varletconst 区别? 对于这个问题,我们应该先来了解提升(hoisting)这个概念。 console.log(a) // undefined var a = 1 从上述代码中我们可以发现,虽然变量还没有被声明,但是我们却可以使用这个未被...
  • letconstvar的区别

    2021-07-27 20:58:18
    (1)块级作用域: 块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5中的两个问题: 内层变量可能覆盖外层变量 用来计数的循环变量泄露为全局变量 (2)变量提升: var...
  • ES5及以前定义变量用var var没有块级作用域,所以会带来很多的问题。 var name = 'aa' function changeName() { name = 'abab' } changeName() console.log(name) 这里最终会输出 “abab”,就是因为var没有...
  • varletconst的区别在最新的 ES6 中,新添加了两个用于变量声明的关键字 let const一、var声明的变量会挂载在window上,而let和const声明的变量不会:var a = 'a';console.log(a,window.a) //abc abclet b = '...
  • letconst和var的区别

    2021-04-21 15:30:49
    letconst和var的区别 1.var声明的变量存在变量提升,let和const没有变量提升 var a; console.log(a); a=2;//"unfined" console.log(a); let a=10;//直接报错:"ReferenceError: Cannot access 'a' before" ...
  • var let 以及 const区别用法(详解) 在ES5中,声明变量只有var和function两种形式。但是因为var声明的变量会有一定的缺点(内层变量可能覆盖外层变量的问题以及用来计数的循环变量泄露为全局变量),ES6提出了使用...
  • var let const 的区别

    2021-03-05 14:12:24
    ES6总结 varletconst 1.
  • let var const区别

    2021-09-29 12:49:47
    letconst语法和var一样都是用来声明变量的 1.var 声明的变量是存在变量提升的,let ,const声明的变量不存在变量提升。 变量提升: 变量提升是指代码在未定义之前可以使用且不会报错 console.log(a); //...
  • var,let和const的理解

    2021-03-06 19:43:42
    一、全局作用域与函数作用域 在ES6之前,JS只有两个作用域,全局作用域函数作用域。那么什么是作用域呢?作用域是指一个变量的作用范围。 在ES6中新增了两个关键字,let和const
  • varlet和const的区别

    2021-05-28 16:41:35
    varlet和const的区别 再ES5中,声明变量只有var和function两种形式,但是因为var声明变量会有一定的缺陷(内层变量可能覆盖外层变量的问题,以及用来计数的循环变量泄露为全局变量),ES6中提出了let和const声明...
  • 本章主要讲解ES6新增letconst,内容非常详细,建议读者亲自动手敲一遍,代码看不会,只能敲会
  • 原文出处:https://dzone.com/articles/javascript-difference-between-var-let-and-const-ke这个话题对于一些老鸟来说可能根本算不上疑问,但对于新手来说也许除了最常见的var之外,let和const较少使用的机会。...
  • let const var 区别

    2021-09-10 13:18:53
    var 具有变量提升,letconst没有 var 可以重复声明,letconst不会 var 不具备块级作用域,会造成变量穿透,letconst具有块级作用域(for,if都是),不会造成穿透 letconst会造成暂时性死区 let 在最外层...
  • 在日常工作中,经常是使用到var let const 来定义变量,但是一直不知道它们有什么区别,现在总结一下 var :定义的变量没有块级作用域,是全局变量,而且在同一作用域下可以重复定义 let: 定义的变量有块级作用域,...
  • let和const是 ES6 新增的命令,用于声明变量,这两个命令跟 ES5 的var有许多不同,并且let和const也有一些细微的不同 var和let/const的区别 块级作用域 不存在变量提升 暂时性死区 不可重复声明 letconst...
  • varletconst三者的特点区别

    千次阅读 2021-01-26 11:45:53
    varletconst三者的特点区别 一、var的特点 1、存在变量提升 console.log(a); // undefined var a = 10; // 编译过程 var a; console.log(a); // undefined a = 10; 2、一个变量可多次声明,后面的声明会覆盖...
  • 声明变量varlet和const的区别 JavaScript的变量是松散的,即变量是可以保存任何类型的数据。每一个变量不过是保存任意值的**‘命名占位符’。可以声明变量的有:varletconst;其中var时JavaScript最早使用的...
  • varletconst 的区别

    2021-11-07 16:52:13
    1、var 声明的变量会挂载在 window 对象上,而 let const 声明的变量不会。 举例: var a = '我是a'; let b = '我是b'; const c = '我是c'; console.log(a); // 我是a console.log(window.a); // 我是a console...
  • (1)var是ES5提出的,let和const是ES6提出的。 (2)var声明的变量存在变量提升现象,let和const声明的变量不存在变量提升现象(遵循:“先声明,后使用”的原则,否则会报错)。 解析:var声明的变量存在变量...
  • 一、var在ES5中,顶层对象的属性全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量注意:顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对...
  • var 存在变量提升现象,而 let const 没有此类现象; var 变量可以重复声明,而在同一个块级作用域,let 变量不能重新声明,const 变量不能修改。 参考: ...
  • 在ES5中,顶层对象的属性全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量 注意:顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象 var a = 10; console.log(window.a) // 10 使用...
  • ES6新增加了两个重要的 JavaScript 关键字: let const。它们和var一样,都是用来声明变量。 下面介绍一下它们的区别,以及如何正确使用。 一、let 变量不能重复声明 let name = '周杰伦'; let name = '陈奕迅';...
  • varletconst声明变量的区别 var声明变量特点: (1)变量提升:使用var声明变量会自动提升到函数作用域顶部。 console.log(a);//undefined var a=10; //以上代码可以等价于如下代码 var a console.log...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,798
精华内容 45,919
关键字:

var和let和const