以前只用过JavaScript原生写网站特效,今天还是第一次听说typescript的,然后看了一下它的基本知识,感觉很像Java,真的太像了,但是又有不同点。很让我惊奇看到的第一个知识点就和以前不同,很新鲜。

变量的声明:

在typescript中我知道的变量的声明有两种(除了var),分别是let和const。以前我经常用的是var,let和var很相似,const和他们不一样,让我惊讶的是它居然能阻止对变量的再次赋值。

因为typescript是JavaScript的超集,所以JavaScript本身是支持let和const的。那么我们为什么要使用let和const而不是var呢?

var的作用域规则:

function v(a:boolean){

  if(a){

  var b=10;

}

  ruturn b;

}

  v(true);//10

  v(false);//undefined

上面例子中变量b是if语句里面,但是我们却可以在外面访问它,是因为var申明可以包含它的函数,模块,命名空间或全局作用域任何位置被访问。这些作用域规则可能会引发错误,其中就有多次申明同一个变量并不会报错。var它不会管你声明了多少次,反正你只会得到一次。

let声明:

它和var写法是一样的;他们的区别不在语法上在语义上面;let不能再一个作用域里进行多次声明。

例如:

let x=5;

let x=10;//error

let块作用域:

当let声明一个变量的时候它使用的词法作用域或者是块作用域。块作用域指的就是他们包含的块以外的不能访问。

例如:

function fun(i:boolean){

  let a=5;

  if(i){

  let b=a+5;

  return b;

}

  return b;//error:'b' doesn`t exist here

}

或者

try{

  throw "hello word!";

}

catch(e){

  console.log("word!");

}

  console.log("e");//error:'e' doesn`t exist here

这里的b和e作用域就是if语句块或者catch语句块里。拥有块级作用域的变量有一个特点是他们不能再被声明之前读或者写。

两个块级作用域声明同一变量也会报错。

例如:

function fun(x){

  let x=5;//error interferes with parameter declaration

}

function fu(){

  let x=5;

  var x=5;//error :can`t have both declarations of 'x'

}

并不是想说块级作用域变量不能在函数作用域内声明,而是块级作用域变量需要在不用块里声明。

const声明:

它还是let声明有相同的作用域规则,但是它被赋值后不能再被改变。除非使用特殊的方法去避免,实际上const变量的内部状态是可以改变的。

总结一下吧,现在有两种作用域相似的声明方式,哪一种更好呢?我觉得各有千秋吧,视情况而定。

书上说可以使用做小特权原则,所有变量出除了你计划去修改的都用const。使用const可以让我们更容易推测数据流动。但是我更喜欢用let。

今天第一次接触到typescript,看了第一个知识点就是变量的声明,来回忆回忆,做做笔记的更多相关文章

  1. 第一次接触python:学习最简单的print及变量

    # -*- coding:utf-8 -*- print "hello world" print("hello world") 这里面使用了2中print方式, ...

  2. 百度地图API的第一次接触

    因为项目的需求,第一次接触了百度API. 第一步:引用百度地图API的脚本 如果在局域网环境中,要把地图文件和js文件都要下载下来 <script type="text/javascr ...

  3. 第一次接触终极事务处理——Hekaton

    在这篇文章里,我想给出如何与终极事务处理(Extreme Transaction Processing (XTP) )的第一次接触,即大家熟知的Hakaton.如果你想对XTP有个很好的概况认识,我推 ...

  4. [译]与TensorFlow的第一次接触(三)之聚类

    转自 [译]与TensorFlow的第一次接触(三)之聚类 2016.08.09 16:58* 字数 4316 阅读 7916评论 5喜欢 18 前一章节中介绍的线性回归是一种监督学习算法,我们使用数 ...

  5. 第一次接触C++------感触

    2018/09/24 上大学第一次接触C++,感觉还挺有趣的. C语言是计算机的一门语言,顾名思义,语言嘛,有它自己独特的语法. 第一次用C++敲代码,觉得还挺不错的,可以从中找到乐趣.咏梅老师布置的 ...

  6. 第一次接触FPGA至今,总结的宝贵经验

    从大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表.抢答器.密码锁等实验时那个兴奋劲.当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus ...

  7. Hybird App(一)----第一次接触

    App你知道多少 一 什么是Native App 长处 缺点 二 什么是Web App 长处 缺点 三 什么是Hybrid App 长处 缺点 四 Web AppHybrid AppNative Ap ...

  8. 孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase

    孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase (完整学习过程屏幕记录视频地址在文末) 之前对关系型数据库的学习告一段落,虽然能力所限没有能够完全完成理想中的所有数据库操 ...

  9. 第一次接触数据库(SQLite)

    第一次接触,学了创建列表 + 行的删除 + 内容的更改 + 删除列表 第一次接触要知道一些基本知识 NULL(SQL) = Nnoe(python)  #空值 INTEGER = int  #整数 R ...

随机推荐

  1. java开发连接Oracle 12c采用PDB遇到问题记录

    今天初次使用java连接Oracle 12c,遇到各种问题,为方便后续查询,在汇总了问题记录及解决方案如下. ORA-28040: No matching authentication protoco ...

  2. android学习之ListView

    移通152余继彪 该组件用于显示列表的view  包含了三个关键元素 listView 适配器 以及数据,适配器主要是用于将数据映射到listview,适配器数据主要是有hasmap 配合list对每 ...

  3. 干货分享:MySQL之化险为夷的【钻石】抢购风暴

    抢购钻石不稀奇,稀奇的是有钱赚不到,事情发生在2015年5月20日,大好的日子自然少不了商家的参与.即可为您还原现场,解决思路献给各位,请欣赏Show Time,everybody~ 1.优化起因及工 ...

  4. @autoreleasepool在MRC和ARC中的区别

    对于@autoreleasepool {} (1)在ARC中会销毁所有在里面创建的对象,即使你用外面的Strong指针指向他 (2)在MRC中如果有外部的强指针指向,不会销毁对象,retainCoun ...

  5. vmware linux centos安装

    首先,网上下载vmware,下载后直接安装即可,没什么难度,就不多说了 接下来在vmware中点击create a New Virtual Machine,启动安装界面 选择自定义方式安装,再点击ne ...

  6. 重写equals方法

    用下面的例子来进行解释. String name; int id; @Override public boolean equals(Object otherObject) { if (this == ...

  7. 用PHP抓取淘宝商品的用户晒单评论+图片实例

    为什么想起来做这个功能?是因为前段时间在做一个淘客网站的时候,想到是否能抓取到淘宝商品的买家秀呢?经过一番折腾发现,淘宝商品用户评价信息是通过Ajax来调取的,通过嗅探网址发现,评论数据的请求接口是: ...

  8. RDF和Jena RDF API简介

    这是官方文章<An Introduction to RDF and the Jena RDF API>的译文.原文是在刺猬的温驯这里看到的.其中的图片没法显示了,还有一段丢失了.于是我在此 ...

  9. Python的平凡之路(14)

    一.什么是HTML HTML(Hyper Text Mark-up Language ) 即超文本标记语言,是 WWW 的描述语言,由 Tim Berners-lee提出.设计 HTML 语言的目的是 ...

  10. html5/css学习笔记

    请始终将正斜杠添加到子文件夹.假如这样书写链接:href="http://www.w3cschool.cc/html",就会向服务器产生两次 HTTP 请求.这是因为服务器会添加正 ...