以前只用过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. Android中View的事件分发机制

    简介 事件也称MotionEvent,事件分发机制就是对MotionEvent事件的分发过程,即当一个MotionEvent发生之后,系统需要把这个事件传递给一个具体的View. 点击事件的分发过程由 ...

  2. 计算机网络(10)-----TCP的拥塞控制

    TCP的拥塞控制 拥塞(congestion) 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏. 拥塞控制 拥塞控制就是防止过多的数据注入到网络中,这样可以使网 ...

  3. eap-md5

    eap-md5       文件路径 用途 示例 备注 #gedit /usr/local/etc/raddb/sites-available/default #gedit /usr/local/et ...

  4. Android高效加载大图、多图解决方案,有效避免程序OOM

    高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...

  5. ios framework 简单制作

    在制作过程中遇到的一些问题跟大家分享下,直接上步骤 制作库有分模拟器框架和真机矿机  如果报错x86_64什么的字眼就是库里面没有包含模拟器框架 模拟器:iPhone4s~5 : i386 iPhon ...

  6. hdu 2074

    ps:WA了好多次...因为首先是n=1的情况,其次是中心花色和外花色,中心花色也有可能是最外层花色....很无语. 然后就是格式问题咯. 代码 #include "stdio.h" ...

  7. Selenium简介(二)--基于CORE/IDE的简单应用

    参考  http://blog.csdn.net/iamqa/article/details/4398240 Selenium简介(一)--总体介绍  http://blog.csdn.net/iam ...

  8. esxi 6 添加硬盘、网卡

    添加硬盘 esxi系统装完之后,直接再接上一块硬盘,然后再使用管理工具添加硬盘 打开VMware vSphere Client,登录esxi服务器, 打开配置-存储器-选择添加存储器 选择磁盘 这里能 ...

  9. block,inline和inline-block概念和区别(转)

    转自  http://www.cnblogs.com/KeithWang/p/3139517.html 总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-lev ...

  10. oracle实现split函数功能

    转载: http://blog.csdn.net/jojo52013145/article/details/6758279在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 R ...