var 与  let 都是TypeScript里的变量声明方式

两者非常相似,在语法不存在很大的差异,而在语义上存在很大的区别

块作用域

var有着些奇怪的作用域规则

例如

function  f(run: Boolean)
{
if(run)
{
var x=10;
}
return x;
} f(true); //返回10
f(false); //返回 undefined

而 let 的作用域就正常多了

function  f(run: Boolean)

{   

         let a=1;
if(run)
{
let x=a+1;
return x; //没有错误
}
return x; //错误,x不存在
}

声明

var

多次声明同一个变量,不会报错,只会得到一个变量

function f()
{
var x;
var x;
}

上述例子中,所有的x的声明实际上都引用了一个相同的x

这样的声明规则就会造成这样的错误

function f(m : number [ ] [ ] )
{
var sum=0;
for (var i=0 ; i<5 ; i++ )
{
var row = m [ i ] ;
for ( var i=0 ; i<5 ; i++ )
sun=+ row[ i ];
}
return sum;
}

这里返回的sum,并不是这个二维数组的值的总和,原因是里层的for 循环会覆盖变量 i ,所有的 i 都引用相同函数的作用域内的变量。

let
就相对严格,无法多次声明同一个变量,一个变量只能声明一次,并且无法在 let 语句前去访问该变量

function f()
{
let x;
let x; //错误
}

在嵌套作用域中,let 还具有屏蔽功能

function f(m : number [ ] [ ] )
{
let sum=0;
for (let i=0 ; i<5 ; i++ )
{
let row = m [ i ] ;
for ( let i=0 ; i<5 ; i++ )
sun=+ row[ i ];
}
return sum;
}

这里的得到的sum就是正确答案,因为内层的 i 会屏蔽掉外层的 i 。

通常来讲,我们应该避免使用这个屏蔽功能,这样我们才能写出清晰的代码,但有些情况会需要这种写法

原文地址:https://blog.csdn.net/weixin_41962385/article/details/80158246

【转载】TypeScript学习笔记——var与let的更多相关文章

  1. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  2. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  3. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. TypeScript学习笔记(八):1.5版本之后的模块和命名空间

    我之前有写过TS1.5版本之前的“模块”的笔记:TypeScript学习笔记(七):模块 但是TS这里的模块和在ECMAScript 2015里的模块(即JS原生支持了模块的概念)概率出现了混淆,所以 ...

  5. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  6. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  7. Typescript 学习笔记三:函数

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  9. typescript学习笔记(三)---接口

    关于第二章的学习笔记是变量声明. 接口:TypeScript的核心原则之一是对值所具有的结构进行类型检查. 它有时被称做“鸭式辨型法”或“结构性子类型化”. 在TypeScript里,接口的作用就是为 ...

随机推荐

  1. 解决iframe加载的内容有时显示有时不显示

    在ASP.NET MVC项目中遇到了这样的一个问题,假设父页面有一个iframe <iframe id=" width="100%" height="10 ...

  2. javascript:base.superclass.constructor.call(this,config)

    javascript中类的继承机制如下,有一个baseClass的类,然后为其定义两个方法,someMethod()和overwriteMethod() 1 var BaseClass = funct ...

  3. Odoo进销存(采购、销售、仓库)入门教程 - 上

    转载地址:http://blog.csdn.net/wangnan537/article/details/46434373 运行环境: Ubuntu14.04+Odoo8.0 作者:苏州-微尘 0. ...

  4. ZooKeeper_客户端工具zkCli.sh使用

    #一.命令 [root@VM_31_182_centos bin]# ./zkCli.sh -server 127.0.0.1:2181   #二.帮助命令 help #三.创建.修改.删除.退出de ...

  5. kettle 数据提取效率提升

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xpliruizhi123/article/details/54580850 最近发现KETTLE抽数 ...

  6. 利用ViewStub来延迟加载视图

    很多情况下,我们的视图可能会随着用户的操作的不同而变化,比如一个新的页面包含多个控件,但仅仅在用户点击这个按钮后,所有的控件才能完全显示.也就是说一上来可能就显示一个控件,点击按钮后把其他隐藏的控件再 ...

  7. 使用Numpy验证Google GRE的随机选择算法

    最近在读<SRE Google运维解密>第20章提到数据中心内部服务器的负载均衡方法,文章对比了几种负载均衡的算法,其中随机选择算法,非常适合用 Numpy 模拟并且用 Matplotli ...

  8. IIS7增加mine类型,以便可以访问apk

    1.打开IIS 2.找到mine类型,单击右边的添加 3.输入apk的配置 application/vnd.android-package-archive .这样,用户就可以直接访问apk了

  9. python读取配置文件的方式

    python读取配置文件的方式 1.从config.ini中读取,后缀无所谓,文件名字也无所谓,不过config.ini是常用写法,所谓见名知意 config.ini内容: [global] ip = ...

  10. 洛谷 P3386 【模板】二分图匹配

    题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...