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. 浅谈JS的作用域链(二)

    上一篇文章中介绍了Execution Context中的三个重要部分:VO/AO,scope chain和this,并详细的介绍了VO/AO在JavaScript代码执行中的表现. 本文就看看Exec ...

  2. Python_函数的镶嵌和作用域链_26

    def max(a,b): return a if a>b else b def the_max(x,y,z): #函数的嵌套调用 c = max(x,y) return max(c,z) pr ...

  3. 牛客国庆集训派对Day6 B.Board

    链接 [https://www.nowcoder.com/acm/contest/206/B] 分析 只要在n*n范围内随便找一个斜对角的一个格子去计算就知道了 具体看代码体会吧 代码 #includ ...

  4. Atcoder C - Vacation ( DP )

    C - Vacation Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Taro' ...

  5. octave基本指令4

    octave基本指令4 图形化显示数据 >> t=[0:0.01:0.98]; >> y1 = sin(2*pi*4*t); %pi表示π >> plot(t,y1 ...

  6. jQuery(四)

    get():把jQuery转化成原生js <script> $(function(){ //alert($('#div1').get(0).innerHTML); //jQuery里面也有 ...

  7. PHP和JavaScript将字符串转换为数字string2int

    在看廖雪峰的JavaScript教程时,里面有一个题就是利用reduce()将string转换为int,我看评论中贴出的方法,当时觉得挺意外了,以为他只用了一行代码,即下面这行代码 var str=& ...

  8. Linux curl 一例

    root@PC-RENGUOQIANG:~# curl http://kermit:kermit@192.168.66.182:8080/activiti-rest/service/repositor ...

  9. jQuery empty() vs remove()

    https://stackoverflow.com/questions/3090662/jquery-empty-vs-remove http://www.cnblogs.com/yeer/archi ...

  10. Using svn in CLI with Batch

    del %~n0.txt@echo offsetlocal EnableDelayedExpansionfor /f "delims=" %%i in ('DIR /A:D /B' ...