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. 分布式监控系统Zabbix-图形集中展示插件Graphtree安装笔记

    Zabbix想要集中展示图像,唯一的选择是screen,后来zatree解决了screen的问题,但性能不够好.Graphtree 由OneOaaS开发并开源出来,用来解决Zabbix的图形展示问题, ...

  2. js控制css时注意

    font-size:10px--------e.style.fontSize="10px " 属性名:font-size--------fontSize; 属性值:10px---- ...

  3. 个人博客作业Week2(9月30日)

    一.是否需要有代码规范 1.这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 这些规范并不是一开始就有的,也不是由某个人规定的,代码规范是程序员们在不断地编程实践过 ...

  4. 在Eclipse中使用JUnit4进行单元测试(图文教程一)

    在Eclipse中使用JUnit4进行单元测试 单元测试,JUnit4. 这两个有什么关系呢?这就好比(草)单元测试和(割草机).用这个JUnit4工具去辅助我们进行测试.其实不理解这个也没关系,听多 ...

  5. Docker for windows WIN版本,主板特性问题

    WIN 10 Home版无法开启Hyper-V特性. Docker for windows有Hyper-V和VirtualBox两个版本: https://forums.docker.com/t/in ...

  6. FreeMarker boolean Issue

    FreeMarker template error:Can't convert boolean to string automatically, because the "boolean_f ...

  7. [转帖]super-inspire

    quickStart/快速开始 访问临时服务器地址, 你可以在这里选择一个喜欢的系统, 然后系统将自动创建该系统的容器, 并自动打开新的网页进入 web shell 交互. 目前支持 Ubuntu14 ...

  8. Jquery 组 标签页

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...

  9. Java DateUtils 的实用

    Java DateUtils的实用可以很方便的对日期进行对年,月,日,时,分,秒的相加和相减,能很好的解决日期的运算 可以不用必须调用Oracle等数据库本地函数进行运算,相比之下更为简洁方便. pa ...

  10. 如何在Vue项目中引入jQuery?

    假设你的项目由vue-cli初始化 (e.g. vue init webpack my-project). 在你的vue项目目录下执行: npm install jquery --save-dev 打 ...