上一篇:基础变量中我们在声明变量时使用了关键字let,这和JS中的var有点类似。

语法

基本语法:let 变量名:类型。当然类型不是必须的。

let x:number;
let y:string = 'xx';
let z;
z = 'xxx';

var

var和let最大区别就是作用域不同,let有严格的块作用域。

  • 1 我们都知道,js中的作用域不是很严格。比如下面代码:
flag = true;
if (flag) {
var msg = 'I am OK';
} console.log(msg); // I am OK

在js中变量msg仍然可以输出I am OK,甚至变量flag不适用关键字也可声明。

  • 再举一个关于闭包的例子,如下:
for (var i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 100 * i);
}

输出结果则是:10个10。

  • 3 重复定义和变量提升
var x = 10;
var x = 20;

在js中连续声明同一个变量是不会报错的,我们只会得到最后声明的。

  • 4 变量提升
a++;
var a';

变量提升在js中也很常见,解释器解析时会先遍历变量声明,然后将其提升到函数最上面,所以上面的写法完全没有问题

以上这些问题经常在review时漏洞,引发无穷的麻烦。很多团队中也禁止出现这种代码,就是防止潜在的风险。现在有了let我们再也不用担心这方面的问题了。

let

var相比,let是块作用域。 块作用域变量在包含它们的块或for循环之外是不能访问的。

for (let i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 100 * i);
}

输出结果:从0到9

flag = true;
if (flag) {
let msg = 'I am OK';
} console.log(msg); // 编译报错 var x = 10;
var x = 20; // 编译报错 a++;
var a'; // 编译报错

varlet区别

  • 作用不同,let是有严格的块作用域
  • 在块中,不能重复声明,要先声明后使用,这和java这种强类型语言一样

const声明

const是对let的一个增强,它能阻止对一个变量再次赋值。类似java中的final.

const msg = "This is a message";
msg = "xx" // 编译报错 const person = {
name: "Aurora",
age: 20
} person = {}; // 编译报错 person.name = "tom" // OK
person.age = 10 // OK

对于对象,我们可以改变对象内部属性的值,但是不能改变对象引用(不确切地说是对象地址)

TypeScript笔记 4--变量声明的更多相关文章

  1. scss 初学笔记 一 变量声明 默认的样式 嵌套

    $width: 300px !default; $:          变量声明符号; width:    变量名称; 300px:   赋予变量的值; !default  代表默认样式 !defau ...

  2. ES6学习笔记之变量声明let,const

    最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能 ...

  3. TypeScript笔记 5--变量声明(解构和展开)

    解构是什么 解构(destructuring assignment)是一种表达式,将数组或者对象中的数据赋给另一变量. 在开发过程中,我们经常遇到这样问题,需要将对象某个属性的值赋给其它两个变量.代码 ...

  4. 批处理学习笔记3 - 变量声明和goto代替while循环

    批处理中没有while循环,只能用goto代替.下面是代码 @echo off set /a i = 0 :again echo %i% set /a i= %i% + 1 if %i% lss 10 ...

  5. scala学习笔记:变量声明中的模式

    先看个正常的写法: scala> val x = 1 x: Int = 1 体会一下元组的写法: scala> val (x,y,z)=(1,2,3) x: Int = 1 y: Int ...

  6. 浅谈javascript函数,变量声明及作用域

    javascript函数跟变量的声明.作用域这些概念网上都已经讲烂了. 这里写个博客,也相当于做个笔记. 变量声明 首先看个例子: var globalVar = "gv"; fu ...

  7. Typescript学习笔记(三)变量声明及作用域

    ts的变量声明有var,let和const,这尼玛完全跟es6一样嘛.就稍微介绍一下. 大多数js开发者对于var很熟悉了,原生js里没有块级作用域,只有函数作用域和全局作用域,还存在var的变量提升 ...

  8. TypeScript 素描-变量声明

    博文读自 TypeScript 官方文档而来,不具有学习性,仅是本人学习时记录以供日后翻阅 ,有学习TypeScript的朋友还请去看更为详细的官方文档 /* 变量声明在之前的js中一直是使用var关 ...

  9. TypeScript语法学习--变量的声明

    JavaScript里相对较新的变量声明方式是let和const.let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题. const是对let的一个增强,它能阻止 ...

随机推荐

  1. class_copyIvarList方法获取实例变量问题引发的思考

    在runtime.h中,你可以通过其中的一个方法来获取实例变量,那就是class_copyIvarList方法,具体的实现如下: - (NSArray *)ivarArray:(Class)cls { ...

  2. Docker(十二):Docker集群管理之Compose

    1.Compose安装 curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname ...

  3. ES6 函数的扩展2

    8.2 rest参数 ES6引入rest参数(形式为"-变量名"),用于获取函数的多余参数,这样就不需要使用arguments对象了. arguments对象并没有数组的方法,re ...

  4. SpringBoot初步

    1.创建maven 项目 quickstart类型 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  5. 优化设计提高sql类数据库的性能

    前言 在一个项目中,技术的统一性是最重要的,数据库的设计则是重点中的重点.NoSQL 是目前最流行的数据库,但是其实用性和功能性远不如sql数据库. 实际很多SQL数据库被诟病的性能问题大多是源于程序 ...

  6. Mysql使用alias 防止对数据的误操作

    在我们操作数据库的时候,尤其是执行,update,delete操作的时候,都存在着误操作的风险,今天发现一种方法,能避免这一问题,就是使用Mysql的alias . 1.查看Mysql帮助 #mysq ...

  7. CSS开发规范

    虽然很久之前整理过一份简单的CSS规范,但是当时写的也不是很全面,有些细节也没有照顾到.记录一份较详细的版本,以备不时之需. 命名规范 [强制] class一律使用小写字母+下划线格式命名 例: cl ...

  8. Jenkins 学习笔记(一):我对 Jenkins 的宏观认识

    Jenkins 是一个持续构建的系统,通过一周的了解熟悉,其逻辑似乎很简单. Jenkins 拓扑 Jenkins 逻辑 1. 从代码库拉取代码. 2. 处理代码. 对于需要编译的程序,需要进行处理, ...

  9. Xposed hook布局类资源文件的获取

    如题,可以hook状态栏,为系统状态栏添加一个TextView @Override public void handleInitPackageResources(XC_InitPackageResou ...

  10. grpc

    grpc入门(二) 一. 目标 本博文要介绍的是编写 grpc入门(一)中所提到的四种rpc的方式,然后通过命令行和eclipse两种方式生成对应的java代码,关于grpc是什么东西本文不再赘述. ...