javascript-变量学习

javascript-变量学习

var

在ES6之前,定义变量是这样的

var a = 'hello';

甚至是这样(非严格模式下),这里,js会自动为变量加上var,等于是定义了一个全局变量a。

a = 'hello';

let

ES6引入

let a = 'hello';

a = 'world';

const

const由ES6引入,是指常量,用const定义的变量不能被重新赋值,如果被重新赋值会抛出错误。

实际项目里面,你会发现很多变量其实都不会重新赋值,所以,一开始可以都用const来定义变量,直到发现需要重新赋值时才将其改为let。

const a = 'hello';

a = 'world';//TypeError: Assignment to constant variable

需要注意,以下这样不是重新赋值,新手容易记混

const foo = [];
foo.push(1, 2, 3);

var和let有什么区别?

都是用来定义变量,它们有什么区别呢?请看下面的例子:

function test(){
    if(true) {
        var a = 'hello';
    }
    console.log(a);//hello
}
test();

var定义的变量会被提升,上面这段代码可以翻译一下,

function test(){
    var a;
    if(true) {
        a = 'hello';
    }
    console.log(a);//hello
}
test();

注意这里var声明的变量,其声明被提升到了方法的开始,但赋值不会被提升,也就是说在赋值之前访问都是undefined

如果将var改成let,将会抛出ReferenceError

function test(){
    if(true) {
        let a = 'hello';
    }
    console.log(a);//ReferenceError: a is not defined
}
test();

我们再看一个例子,此题出自这里[javascript-questions]第1题(https://github.com/lydiahallie/javascript-questions)

function sayHi() {
  console.log(name);
  console.log(age);
  var name = 'Lydia';
  let age = 21;
}

sayHi();

输出是什么呢?

答案: undefined和ReferenceError 解析:

var定义的变量为什么输出undefined,相信聪明的你应该知道了。

let定义的变量为什么输出ReferenceError值得说一说,首先要知道"临时死区"(Temporal Dead Zone,简称TDZ)这么一个概念。

什么是临时死区呢?临时死区是ES6首次引入的一个概念,可以这样简单理解,用letconst声明的变量,在其初始化之前都不能被访问,否则将抛出ReferenceError

也就是说上面的例子中直到let age = 21被赋值之前,尝试获取age变量都会抛出ReferenceError

总结

  1. var声明的变量会被提升,但赋值不会提升
  2. letconst声明的变量会产生临时死区
  3. const声明变量不能被重新赋值
  4. 建议使用letconst来进行变量声明

写作时间:2020-05-24

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JavaScript中,变量声明是非常重要的一部分。根据引用,变量声明需要遵守一些规则,比如变量名必须以英文字母、下划线(_)或美元符号($)开头,而后面可以包含字母、下划线(_)、美元符号($)和数字。变量名不能使用系统的关键字或保留字作为变量名。在JavaScript中,变量有不同的数据类型,包括Number、String、Boolean、undefined和null。如果声明了一个变量但未赋值,则它的值为undefined。 根据引用,练习题是一个很好的学习JavaScript变量的方式。通过练习,可以巩固对变量声明和赋值的理解,并提升编程能力。练习题可以包括不同的难度级别,从简单的变量声明到复杂的类型转换和条件语句。这样的练习题可以帮助新手更好地掌握JavaScript变量的概念和用法。 所以,JavaScript变量的练习题可以包括以下内容: - 变量声明和赋值 - 数据类型转换 - 条件语句和循环语句的应用 通过这些练习题,可以提高对JavaScript变量的理解和熟练度。希望这些练习对你的学习有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [(一)Javascript从变量至类型转化(含练习)](https://blog.csdn.net/weixin_51458883/article/details/114852562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [JavaScript变量声明详解](https://download.csdn.net/download/weixin_38713450/13040420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值