千家信息网

JavaScript中的变量声明怎么理解

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章的内容主要围绕JavaScript中的变量声明怎么理解进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!
千家信息网最后更新 2025年11月07日JavaScript中的变量声明怎么理解

这篇文章的内容主要围绕JavaScript中的变量声明怎么理解进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!

    变量

    ECMAScript中,变量可以保存任何类型的数据(既可以是字符串也可以是数组也可以是别的),也即"松散的",变量只是一个用来区分的占位符,一共有var、const、let三个关键字用于声明变量(var在ECMAScrip所有版本可用,后两个只在ES6及以后可用)。

    (一)var

    var a;//仅定义var b='hi';//定义的同时,设置值

    要注意的是,值的设置可以覆盖,但我们不推荐这么做

    var a="hello"a="hi"

    ECMAScript的变量是"松散"的,那么可以用一条语句来对不同的数据类型初始化的声明,当然插入、换行不是必要的,只是一定要用逗号隔开不同的变量。

    Var a="hello",    b=12,    c=false;
    1)关于var声明的变量的作用域
    function test(){    var a="shanxi";}test();//调用函数console.log(a);//ReferenceError: a is not defined//报错:a未定义

    变量在使用var定义时,若是在函数内部,则该变量在函数退出时将会被销毁,无法再调用。这里的a在函数test内部使用var完成定义,调用函数test之后,随即a便被销毁,因而出现如上报错。

    当省略关键词var时,这样定义的变量将成为全局变量(不过不建议这么做,太多的全局变量会让程序变得难以维护)

    function test(){    a="sichuan";}test();//调用函数console.log(a);//sichuan
    2)var声明提升(hoist)

    如下,结果是undefined而并没有报错,是因为,使用var关键字声明的变量,会自动提升到函数作用域的顶部。也就是,会被ECMAScript看作

    function test(){   console.log(a)   var a=12;}test()//undefined

    也就是,会被ECMAScript看作

    function test(){   var a;    console.log(a)   a=12;}test()//undefined

    这种"提升",会把所有变量的声明都提到函数作用域的顶部。

    (二)let

    Let和var作用相似,只是let声明的范围是块作用域,var声明的范围是函数作用域

    例如如下的if语句中的{}就是一个"块",而不是一个函数作用域。

    if(true){    var b="zhang"    console.log(b);//zhang}console.log(b);//zhang

    换成let:

    if(true){    let b="zhang"    console.log(b);//zhang}console.log(b);//ReferenceError: b is not defined

    此时b在if外边(定义b的块作用域外)便不能被引用。

    !!!注意:块作用域是函数作用域的子域(是前者不一定是后者是后者不一定是前者)。

    !!!注意:适用于var的作用域限制,对let是等同的(只是一个作用域是函数作用域一个是块作用域)。

    关于重复声明,var不报错而let会报错,看如下实例:

    var a=24;var a=12;var a=5;console.log(a);//5let b=2;let b=4;//SyntaxError: Identifier 'b' has already been declared//运行到此处就已经报错let b=8;console.log(b);var a=24;var a=12;var a=5;console.log(a);//5let b=2;let b=4;//SyntaxError: Identifier 'b' has already been declared//运行到此处就已经报错let b=8;console.log(b);

    关于嵌套使用,JavaScript会记录用于变量声明的标识符以及其所在块的作用域,所以在嵌套使用时,不会报错(因为在同一块作用域中没有重复声明)。

    var a="shanxi"console.log(a);//shanxiif(true){    var a="sichaun";    console.log(a);//sichuan}let b=3;console.log(b);//3if(true){    let b=5;    console.log(b);//5}

    所以,let和var区别只在于,二者决定所声明的变量的相关作用域存在。

    var a;let a;//SyntaxError: Identifier 'a' has already been declaredlet c;var c;//SyntaxError: Identifier 'c' has already been declared
    1)与var不同,let声明的变量不会再作用域中被提升,这一现象被称为"暂时性死区"
    console.log(a);var a=2;//undefinedconsole.log(b);let b=3;//ReferenceError: Cannot access 'b' before initialization
    2)全局声明

    Var在全局作用域中声明出的变量自动会成为window对象的属性,但let不会

    var a=3;console.log(window.a)//alet b=10;console.log(window.b);//undefined

    不过let声明出的变量,依旧是全局作用域发生的(不然也不会是"undeifned"),变量也会在页面的生命周期内存续,所以必须保证页面不会重复声明同一个变量

    (三)Const

    基本上和let相同,只是使用const时,必须同时初始化变量,且尝试修改const声明的变量时会报错

    const n="zhang";n="li";//TypeError: Assignment to constant variable.const a=12;const  a=9;//不可以重复声明//SyntaxError: Identifier 'a' has already been declared

    当然,const有关声明的限制,只适用于它指向的变量本身的引用,也就是说,若为一个对象,那么修改这一对象内部属性,不会违反const有关的限制。

    const house={};

    house.name="myhouse";

    那么,在let和const出现之后,许多开发者不再很多地使用var了,多使用let和const,使得变量有了明确的作用域、声明位置以及不变的值。

    感谢你的阅读,相信你对"JavaScript中的变量声明怎么理解"这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注网站!小编会继续为大家带来更好的文章!

    变量 作用 函数 全局 只是 不同 也就是 关键 对象 限制 松散 关键字 内容 同时 属性 数据 文章 篇文章 类型 范围 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 达内软件开发的培训机构 熟读网络安全管理办法并遵守 传达网络安全工作会议精神 优秀网络技术员 关于进一步加强医疗设备网络安全 高新区进口服务器厂家直销价格 当前网络安全形势怎么看 rcp服务器不可用 云存储服务器在很多国家 对计算机网络技术基础的建议 初学数据库看什么书 网络安全监管工作的工作汇报 怎样申办网络安全研究所 网络安全调查显示 计算机网络技术基础传输层图 原油交易的好软件开发 数字化时代企业网络安全 方舟手机服务器怎么开启 大话西游锦绣山河服务器 数据库的安全有直接关系 杭州杰马互联网科技有限公司 中卫库勾网络技术有限公司 莱芜进销存erp软件开发 中植软件开发 云服务器网站 无线放大的服务器软件有哪些 数据库查看登录sa密码 软件开发大学生毕业论文 软件开发的发展与前景 新能源网络技术原理
    0