zoukankan      html  css  js  c++  java
  • 面试官竟然问我JavaScript中var、let和const有什么区别这样简单的问题?

    这几天逛CSDN论坛,发现在一些前端模块发的问题大都是因为var、let和const搞不清楚导致的,今天我来浅析下,希望对看到这篇博客的童鞋有所帮助~

     What we know is that…(英语作文万能开头) :在JavaScript中有三种声明变量的方式:var、let、const。

    1.var
    (1)var定义的变量在之后可以修改,如果不初始化会输出 undefined,不会报错。

    var a;
    console.log(a); // undefined
    // -----------------------------
    console.log(a); // undefined
    var a = 1;

    (2)var定义的变量,可以跨块访问, 不能跨函数访问。

    (3)var只有函数作用域,没有块级作用域。

    (4)var的作用域是函数作用域,var可以用来声明全局变量,也可以声明局部变量。在一个函数内利用var声明一个变量,则这个变量在这个函数内有效。

    • 全局变量:在函数外定义的变量,作用域是整个代码文件。
    • 局部变量:在函数内定义的变量,作用域是当前的函数内部。
    var a = 666; 
    console.log("函数外var定义a:" + a); // 函数外var定义a:666
    
    function cg(){
    a = 888;
    console.log("函数内var定义a:" + a);// 函数内var定义a:888
    }
    
    cg();
    console.log("函数调用后var定义a为函数内部修改值:" + a);
    // 函数调用后var定义a为函数内部修改值:888

    (5)可以重复定义,后面的值会覆盖前面的。

    var a = 1;
    var a = 2;
    console.log(a); // 2


    2. let
    (1)let是块级作用域,函数内部使用let定义后,对函数外部无影响。

    let a = 666; 
    console.log("函数外let 定义a:" + a); // 函数外let 定义a:666
    
    function cg(){
    let a = 888;
    console.log("函数内let 定义a:" + a);// 函数内let 定义a:888
    }
    
    cg();
    console.log("函数调用后let 定义a为函数内部修改值:" + a);
    // 函数调用后let定义a为函数内部修改值:666

    (2)不存在变量声明提前,否则会报错。

    console.log(a);
    let a = 1;

    (3)let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。

    var c=11;
    {
    let c=12;
    console.log(c);// 12
    }
    console.log(c);// 11

    (4)不能重复定义,否则会报错。

    let a = 1;
    let a = 2;
    console.log(a);


    3. const
    (1)const定义的变量不可以修改,而且必须初始化

    const b = 2;// 正确
    const b; // 错误,必须初始化


    (2)const一般用来声明常量,且声明的常量是不允许改变的,为只读属性,因此就要在声明的同时赋值

    (3)const与let一样,都是块级作用域,只能在块作用域里访问,存在暂时性死区,不存在变量声明提前,不允许重复定义。

    const b = 2; 
    const b = 2; 
    console.log(b);

    最后,我们可以采用闭包来防止全局污染,详见:闭包原理


    ————————————————
    版权声明:本文为CSDN博主「huangfuyk.」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_42881768/article/details/105056122

  • 相关阅读:
    CRM 安装过程 AD+SQL+CRM
    CRM系统新思维
    美团点评前端无痕埋点实践
    大数据平台的技术演化之路 诸葛io平台设计实例
    Dynamics 365 for Team Members Description
    Integrating SharePoint 2013 with ADFS and Shibboleth
    CRM 安全证书到期操作命令
    cmseasy CmsEasy_5.6_20151009 无限制报错注入(parse_str()的坑)
    Mlecms Getshell
    Discuz 5.x 6.x 7.x 前台SQL注入漏洞
  • 原文地址:https://www.cnblogs.com/Antwan-Dmy/p/12566457.html
Copyright © 2011-2022 走看看