以前只用过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. C++中的全局变量、普通局部变量和静态局部变量的区别

    在C++中,我们经常难以说清楚全局变量.局部变量和静态局部变量的区别.本博客从变量存储特性和标识符作用域两个角度区分这三个变量. 首先,我们来看看C++程序的内存区域是如何分配的. 从上图,我们可以看 ...

  2. JavaScript 变量作用域

    一. 变量声明 变量用var关键字来声明,如下所示: 变量在未声明的情况下被初始化,会被添加到全局环境. JavaScript执行代码时,会创建一个上下文执行环境,全局环境是最外围的环境.每个函数在被 ...

  3. Three.Js学习第一天

    因为工作需求,最近接触到了ThreeJs库,国内学习文档的确少,所以在这里写下bolgs记录学习史,并且给后面学习的人尽一份微博之力. 3D场景依靠WebGL技术.目前支持比较好的浏览器,谷歌.火狐. ...

  4. MVVM ObservableCollection<> ListView

    目标:在ListView中,设两列,一列表示人的姓名,一列表示年龄,用ObservableCollection<>来实现. 编程: 1)定义类Person public class ABC ...

  5. 初步了解JPA

    想当初07.08年的时候,毕业之季,正思考着离开学校要去做什么工作.为了有一份薪资不错,可以长久发展,也正是自己喜欢的行业.于是乎决定投身于计算机行业.当年正是JAVA的火热时期.到处都是JAVA培训 ...

  6. 关于aggregation 语法和表达式大全(最新3.4版)

    用mongodb四年多了,从1.8版用到目前的3.4版,功能越来越强大,而且它的每一次升级带给我的都是惊喜,最近发现他的aggregation(管道)技术越来越丰富了,基本上将它提供的所有功能都集成了 ...

  7. ADO.NET与ORM的比较:NHibernate实现CRUD(转)

    原文地址 http://blog.csdn.net/zhoufoxcn/article/details/5402511 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spr ...

  8. GoldenGate针对OEM 13.1的版本发布

    OGG 针对OEM(Oracle Enterprise Manager) 13.1的插件已经可以从这里下载: http://www.oracle.com/technetwork/middleware/ ...

  9. 修改mozilla firefox的设置

    修改firefox的user agent 浏览器里输入about:config 修改general.useragent.override

  10. c# 禁用 webBrowser 声音(转)

    const int FEATURE_DISABLE_NAVIGATION_SOUNDS = 21; const int SET_FEATURE_ON_PROCESS = 0x00000002; [Dl ...