1.const是对let的一个增强,它能阻止对一个变量再次赋值。
2.
1)for (var i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 100 * i);
}
打印结果:10 10 10 10 10 10 10 10 10 10
2)for (var i = 0; i < 10; i++) {
(function(i) {
setTimeout(function() { console.log(i); }, 100 * i);
})(i);
}
用立即执行函数捕获一个i参数
打印结果:0 1 2 3 4 5 6 7 8 9
结论:
在setTimeout的例子,我们最后需要使用立即执行的函数表达式来获取每次for循环迭代里的状态。
实际上,我们做的是为获取到的变量创建了一个新的变量环境。
当let声明出现在循环体里时拥有完全不同的行为。 不仅是在循环里引入了一个新的变量环境,
而是针对 每次迭代都会创建这样一个新作用域。 这就是我们在使用立即执行的函数表达式时做的事
,所以在 setTimeout例子里我们仅使用let声明就可以了。
3.拥有块级作用域的变量的另一个特点是,它们不能在被声明之前读或写。
a++; // illegal to use 'a' before it's declared;
let a;
4.作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。
5.JS并不支持块级作用域(如for ,if),它只支持函数作用域
6.const拥有与 let相同的作用域规则,但是不能对它们重新赋值。
7.typeScript允许你将对象的成员设置成只读的.
所有变量除了你计划去修改的都应该使用const
9.接口:接口就好比一个名字,用来描述下面例子里的要求。TypeScript的核心原则之一是对值所具有的shape进行类型检查。接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
interface LabelledValue {
label : string;
}
function printLabel (labelledObj : LabelledValue){
console . log(labelledObj . label);
}
let myObj = {size : 10, label : "Size 10 Object"};
printLabel(myObj);
我们只会去关注值的外形。 只要传入的对象满足上面提到的必要条件,那么它就是被允许的。
10.最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用const,若做为属性则使用readonly。
11.接口描述了类的公共部分,而不是公共和私有两部分。 它不会帮你检查类是否具有某些私有成员。
12.接口描述了类的公共部分,而不是公共和私有两部分
13.类:
1)引用任何一个类成员的时候都用了this。 它表示我们访问的是类的成员。
2)constructor是一个对象创建时会自动执行的成员函数。
3)protected成员在派生类中仍然可以访问
4)TypeScript使用的是结构性类型系统。
5)当成员被标记成private时,它就不能在声明它的类的外部访问
6)TypeScript里,成员都默认为public,即成员是可见的。
7)用new构造了Greeter类的一个实例。 它会调用之前定义的构造函数,创建一个Greeter类型的新对象,并执行构造函数初始化它。
8)如果其中一个类型里包含一个private成员,那么只有当另外一个类型中也存在这样一个private成员, 并且它们都是来自同一处声明时,我们才认为这两个类型是兼容的。
9)构造函数也可以被标记成protected。 这意味着这个类不能在包含它的类外被实例化,但是能被继承