上一篇:基础变量中我们在声明变量时使用了关键字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. html5 canvas画布尺寸与显示尺寸

    我在用canvas制作画板时,遇到了绘图位置和鼠标位置不一致的问题,所以今天查阅了一下资料,解决了这个问题. canvas绘图原理 在Canvas元素的内部存在一个名为2d渲染环境(2d rederi ...

  2. JavaBean转Map方法

    Map<String, Object> fieldMap =new HashMap<String, Object>(); BeanInfo beanInfo = Introsp ...

  3. JavaUtil_06_DES加解密工具

    一.示例 CommonUtil.java package com.ray.test.des; import java.io.ByteArrayOutputStream; import java.io. ...

  4. CSS实现商城分类导航效果(hover选择器)

    学完制作出这个导航效果之后,收获最多的是了解了hover选择器的功能,:hover 选择器用于选择鼠标指针浮动在上面的元素.在鼠标移到元素上时向此元素添加特殊的样式(CSS).例如:改变鼠标悬停处的元 ...

  5. 伽罗瓦域(有限域)GFq^12上元素的1→2→4→12塔式扩张(1)------第一次扩张

    伽罗瓦域是抽象代数下的域论分支中的内容,这部分想必很多人都比较熟悉,此处不再赘述. 最近,国密算法中的SM2和SM9已经成为国际标准,其中SM9算法在椭圆曲线离散对数难题的基础上,添加了若干个双线性配 ...

  6. fastq,sam文件一些小结(持续补充。。。)

    ST-E00211::H5L3NCCXY:::: chr14 141M = - ACTTCACCTCCTGGAGTCCTGGACTTCCCCACATCTCCCCTGCCCCTCCCACGTTTCCAT ...

  7. Sublime Text 使用教程

    Sublime Text 是一款非常轻量级而且功能十分强大的编辑器,支持大量插件,深受前端开发者的喜爱.多的不说,我们直接进入正题. 1.下载 ①.官网下载地址:http://www.sublimet ...

  8. docker:(1)docker基本命令使用及发布镜像

    docker镜像可以完全看作一台全新的电脑使用,无论什么镜像都是对某一东西进行了配置,然后打包后可以快速移植到需要的地方直接使用 省去复杂的配置工作 比如java web项目部署,如果是新部署,需要装 ...

  9. datatable使用笔记

    这是一个使用datatable的jsp文件实例,实现了点击单元格后编辑单元格所在行的内容. <%@ page pageEncoding="UTF-8"%> <!D ...

  10. 使用Template格式化Python字符串

    对Python字符串,除了比较老旧的%,以及用来替换掉%的format,及在python 3.6中加入的f这三种格式化方法以外,还有可以使用Template对象来进行格式化. from string ...