var a=10;
function f(){
var message="hello,world";
return message;
}
function f(){
a=10;
return function g(){
var b=a+1;
return b;
}
}
var g=f();
g();//11

var 声明有一些奇怪的作用域规则

The var declaration has some strange scoping rules

function f(shouldinitalize:boolean){
if(shouldinitalize){
var x=10;
}
return x;
}
f(true)//'10'
f(false)//undefined

多次声明同一个变量并不会报错

Repeated declarations of the same variable do not cause errors

function sumMatrix(matrix:number[][]){
var sum=0;
for(var i=0;i<matrix.length;i++){
var currentRow=matrix[i];
for(var i=0;i<currentRow.length;i++){
sum+=currentRow[i];
}
}
return sum;
}
for(var i=0;i<10;i++){
setTimeout(function(){console.log(i);},100*i);
}
for(var i=0;i<10;i++){
(function(i){
setTimeout(function(){console.log(i);},100*i)
})(i);
}
function f(input:boolean){
let a=100;
if(input){
let b=a+1;
return b;
}
return b;
}

catch语句声明的变量也具有同样的作用域规则

Variables declared by catch statements also have the same scoping rules

try{
throw "wowow"
}catch(e){
console.log("oh well")
}
console.log(e);

重定义及屏蔽

Redefinition and Shielding

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

块级作用域需要在不用的块里声明

Block-level scopes need to be declared in unused blocks

function f(condition,x){
if(condition){
let x=100;
return x;
}
return x;
}
f(false,0);//return 0
f(true,0)//return 100

在一个嵌套作用域里引一个新的名字称作屏蔽

Lead a new name in a nested scope called shielding

function sumMatrix(matrix:number[][]){
let sum=0;
for(let i=0;i<matrix.length;i++){
var currentRow=matrix[i];
for(let i=0;i<currentRow.length;i++){
sum+=currentRow[i];
}
}
return sum;
}

块级作用域变量的获取

Obtaining Block-level Scope Variables

function theCityThatAlwaysSleeps(){
let getCity;
if(true){
let city="Seattle";
getCity=function(){
return city;
}
}
return getCity();
}
for(let i=0;i<10;i++){
setTimeout(function(){console.log(i);},100*i);
}

const与let声明类似,他们被赋值后不能再改变,他们拥有与let相同作用域规则,凡事不能对他们重新赋值

Like let declarations, const cannot be changed after they are assigned. They have the same scoping

rules as let, and nothing can be reassigned to them.

const numLivesForCat=9;
const kitty={
name:"Aurora",
numLives:numLivesForCat,
}
//Error
kitty={
name:"Danielle",
numLives:numLivesForCat
}
//all okay
kitty.name="Rory";
kitty.name="Kitty";
kitty.name="Cat";
kitty.numLives--;

最简单的解构莫过于数组的解构赋值

The simplest deconstruction is the deconstruction assignment of arrays

let input=[1,2];
let [first,second]=input;
console.log(first);
console.log(second);

解构用于已经声明的变量就更好

It's better to deconstruct variables that have been declared

[first,second]=[second,first];

作用域函数参数

Scope function parameters

function f([first,second]:[number,number]){
console.log(first);
console.log(second);
}
f(input);

使用...语法创建一个剩余变量列表

Create a list of remaining variables using the... Grammar

let[first,...rest]=[1,2,3,4];
console.log(first);
console.log(rest);
//
let [first]=[1,2,3,4];
console.log(first);//1
let[,second,,fourth]=[1,2,3,4];

对象解构

Object deconstruction

let o={
a:"foo",
b:12,
c:"bar"
}
let {a,b}=o;

就像数组解构,可以用没有声明的赋值

Like array deconstruction, assignments without declarations can be used

({a,b}={a:"baz",b:101});

属性命名

Attribute naming

let {a:newName1,b:newName2}=o;
let newName1=o.a;
let newName2=o.b;

属性指示类型

Attribute Indicator Type

let{a,b}:{a:string,b:number}=0;

默认值可以让你的属性为undefined时使用缺省值

Default values allow you to use default values when your attribute is undefined

function keepWholeObject(wholeObject:{a:string,b?:number}){
let {a,b=1001}=wholeObject;
}

函数声明Function declaration

type C={a:string,b?:number}
function f({a,b}:C):void{ }

首先你需要知道在默认值之前设置类型

First you need to know what type to set before the default value

function f({a,b}={a:"",b:0}):void{
//...
}
f()
你需要知道在解构属性上给予一个默认或可选的属性来替换主初始化列表
You need to know that the main initialization list is replaced by a default
or optional attribute on the deconstruction attribute.
function f({a,b=0}={a:""}):void{ }
f({a:"yes"})
f()
f({})

typescript变量声明(学习笔记非干货)的更多相关文章

  1. typescript基础类型(学习笔记非干货)

    布尔值 Boolean let isDone:boolean=false; 数字 Number let decLiteral:number=6; let hexLiteral:number=0xf00 ...

  2. typescript类(学习笔记非干货)

    我们声明一个 Greeter类.这个类有3个成员:一个叫做greeting的属性,一个构造函数和一个greet方法. We declare a Greeter class. This class ha ...

  3. typescript枚举,类型推论,类型兼容性,高级类型,Symbols(学习笔记非干货)

    枚举部分 Enumeration part 使用枚举我们可以定义一些有名字的数字常量. 枚举通过 enum关键字来定义. Using enumerations, we can define some ...

  4. typescript泛型(学习笔记非干货)

    软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性. 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型, 这在创建大型系统时为你提供了十分灵活的功能. In softwa ...

  5. typescript接口(学习笔记非干货)

    typescript的核心原则之一就是对所具有的shape类型检查结构性子类型化 One of the core principles of typescript is to check struct ...

  6. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  7. TypeScript 入门教程学习笔记

    TypeScript 入门教程学习笔记 1. 数据类型定义 类型 实例 说明 Number let num: number = 1; 基本类型 String let myName: string = ...

  8. 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html

  9. Adaptive AUTOSAR 学习笔记 8 - 干货小结:背景、技术、特征、架构、方法论和 Manifest

    官方文档下载方式及介绍情参见 Adaptive AUTOSAR 学习笔记 2 - 官方文档下载及阅读建议. 这是 Adaptive AUTOSAR 学习笔记的第 8 篇,学习笔记 3 - 7 翻译了 ...

随机推荐

  1. C#编写WINNT服务,随便解决安卓开发遇到的5037被众多程序无节操占用的问题

    需求分析: 最近重新开始学习安卓开发,好久不用的ADT集成开发环境频繁遇到不能在仿真机和真机上调试的问题,也就是本人另一篇博文描述的ADB(Android Debug Bridge)监控的5037被金 ...

  2. 通过容器提交镜像(docker commit)以及推送镜像(docker push)笔记

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 查看镜像 [root@docker-test1 ~]# docker image ...

  3. keepalived概述

    一.HA集群中的相关术语 1.节点(node) 运行HA进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和高可用软件服务,在高可用集群中,节点有主次之分,分别称之为主节 ...

  4. 个人博客作业_week1

    1.<构建之法>的5个问题 1.如何避免在产品开发后期不断有重大修改,导致其他模块的连锁反应? 2.游戏用户有哪些类型? 3.如何衡量软件工程的质量? 4.怎么协调团队里相互间的任务分配? ...

  5. 【Beta阶段】第九次Scrum Meeting!(论坛已成功上线)

    每日任务内容: 本次会议为第九次Scrum Meeting会议~ 本次会议为团队项目第九次会议,在会议前大家取得了重大成果! 队员 昨日完成任务 明日要完成任务 刘乾 #179 完成1021的数据处理 ...

  6. Linux期中总结

    在MOOC八周内容高度概括总结如下 (一)计算机是如何工作的 冯诺依曼体系结构——核心:存储程序计算机; X86汇编基础 (二)操作系统是如何工作的 三个法宝——存储程序计算机.函数调用堆栈.中断机制 ...

  7. LeetCode 363:Max Sum of Rectangle No Larger Than K

    题目链接 链接:https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/description/ 题解&代码 1 ...

  8. Maximal Binary Matrix CodeForces - 803A (贪心+实现)

    题目链接 题意有点坑: 给你一个N*N的矩阵,让你填入K个1,使之整个矩阵关于左上到右下的对角线对称,并且这个要求这个矩阵的字典序最大. 对矩阵的字典序的定义是从每一行的第一个元素开始比较,大着为字典 ...

  9. Java基础知识中的注意事项

    设置Java的相关路径,举例: JAVA_HOME  -->   C:\Program Files\Java\jdk1.8.0_191 Path --->   C:\Program Fil ...

  10. ESXi安装时遇到不识别的硬件的处理

    1. 部门新购置了一台inspur 四路 NF8480M4的服务器. 上架之后发现ESXi的标准安装盘无法安装. 找不到磁盘安装介质. 2. 处理办法, 找浪潮专家服务,报上序列号,要上相关的一些软件 ...