上一篇:基础变量中我们在声明变量时使用了关键字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. OpenStack运维(二):OpenStack计算节点的故障和维护

    1.计划中的维护 举例:需要升级某一个计算节点的硬件配置,需要将计算节点上的虚拟机迁移后在对其进行操作,分为两种情况. 1.1 云系统使用了共享存储 a. 获取虚拟机列表:nova list --ho ...

  2. IDE 、SATA、SCSI 的区别

    http://chuanwang66.iteye.com/blog/1134784 IDE IDE的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,它的 ...

  3. git pull与git fetch的区别

    git pull: 取回远程主机某个分支的更新,再与本地的指定分支合并. 用法: git pull <远程仓库> <远程分支名>:<本地分支名> // 如 git ...

  4. Linux(CentOS6.5)下编译安装Nginx官方最新稳定版(nginx-1.10.0)

    注:此文已经更新为新版:http://comexchan.cnblogs.com/p/5815753.html ,请直接查看新版,谢谢! 本文地址http://comexchan.cnblogs.co ...

  5. Webpack 2 视频教程 017 - Webpack 2 中分离打包项目代码与组件代码

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  6. 删除redis 失效节点

    cluster forget命令 cluster forget nodeid

  7. C# 全选中数字文本框内容

    /// <summary>        /// 全选中数字文本框内容        /// </summary>        /// <param name=&quo ...

  8. Oracle死锁情况

    ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 复制代码 代码如下: --锁表 ...

  9. ES6 Generators的异步应用

    ES6 Generators系列: ES6 Generators基本概念 深入研究ES6 Generators ES6 Generators的异步应用 ES6 Generators并发 通过前面两篇文 ...

  10. Python 的编码格式

    [前言] Python的编码格式对于初学者来说是很头疼的一件事,不过如果接触的多了,就会发现,只要在恰当的时候使用了恰好的编码,就不会出现太多的问题. [编码介绍] python 的编码格式2.x 和 ...