温故而知新之- Javascript变量声明

举报
余人杰 发表于 2020/07/31 21:13:10 2020/07/31
【摘要】 变量声明是Javascript基础中的基础,也是在编程中最常用到的,没有它编程就进行不下去(因为没有变量声明导致很多错,哈哈哈),在之前的课堂(WEB前端全栈成长计划(二阶段))中,大家都在pink老师的指导下,认识了Javascript的变量声明,下面,让我们要复习一下,看能不能温故而知一点点新。

变量声明


命名规范

变量名由字母、$、下划线(_) 开头,紧跟着字母、数字、下划线(_)。要注意:变量名不能由数字开头,很多初学者包括我在内,会记乱了。

举个合法命名的栗子

let name = '余人杰';
let $id = 'hw91364016';

重点:Javascript的关键字不可以用作变量名,如  if、while、class、true、false 等等。 栗子如下:

let if = '余人杰';

声明变量的方式

可以使用var、let、const等方式进行定义。

声明和赋值结合,如下:

var name = '余人杰';
let id = 'hw91364016';
const PI = 3.141596;

在不明确变量要赋什么值时,可以先声明变量,等执行一些逻辑后,知道具体值后再给其赋值。

let name;
.....
name = '余人杰';

当功能复杂时,你可能需要多个变量进行存储值,你可以使用  同时声明多个变量。

let name = '余人杰', id = 'hw91364016', age = 18;

弱类型

Javascript变量的特点是弱类型的,它可以保存任何类型的数据,说白了就是变量没有类型可言,但它的值有类型。


变量可以更换不同类型的数据

let name = '余人杰';
console.log(typeof name); // string

name = 666;
console.log(typeof name); // number

name = null;
console.log(typeof name); // object

我们可以看出,Javascript的变量类型,是被所引用的值决定的。


声明变量的基础知识就这些没了?当然不是,还有个很重要的,话说面试常出的变量扩展知识点-变量提升。

变量提升

怎么理解?pink老师划过重点说过,解析器会先解析代码,然后会将声明变量的 声明 的提升到 最前 ,这就是变量提升。

使用  var, function (){}  定义的代码,声明会被提升到前面,赋值还在原位置。

那记住这个有什么用呢?很大作用,有时可以拯救你的程序,你一不注意,就会因为这个常出错。比如:

我们特意写个出错的程序来感受下:

var name = '余人杰';
console.log(name);
let else = 'if';

我们在浏览器的控制台上测试下,发现报这个错 Uncaught SyntaxError: Unexpected token 'else'。


细心的话,你会发现,console.log(name); 是在写在 let else = 'if'; 前面,按我们小白思维理解,应该是先打印'余人杰',但结果并非如此。 而是还没有到执行环节就报错了。

如果你还不明白,我再写一个简单的代码给你理解,把解析器执行过程呈现出来给你细细品:

console.log(name);
var name = '余人杰';
console.log(name);

// 解析器执行过程是这样的
var name;
console.log(name);
name = '余人杰';
console.log(name);

TDZ

课后,我还查阅了一些资料,还有一个由变量扩展的知识,术名叫TDZ,叫做暂时性死区。

怎么理解?就是说变量虽然在作用域内存在了,但要使用时,必须在let 或者 const 声明后才可以。


我们在平时编程时,多注意TDZ,养成先声明后使用的习惯,可以让程序更健壮。

  • 先声明变量,再使用

  • 多使用let/const,少使用var


心得:变量声明虽然时Javascript基础中的基础,但稍不注意,就会导致整个程序出错。所以大家即使以后成了大牛,也要注意,多回顾基础,巩固根基,让路走的更远。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。