1.声明变量使用let或者const
首先,const是对let的一个增强,它能阻止对一个变量再次赋值。const变量的内部状态是可修改的。
例如:const a ={a:"1",b:"2"}; a.a ="3"; 这样做,是允许的。
但是在typescript中,TypeScript允许你将对象的成员设置成只读的。
我们在浏览器控制台可以用如下代码打印出:
for(var i=0;i<10;i++){
setTimeout(
function(){
console.log("每一次的值:",i);
},
i*100);
}
会打印出如下结果
每一次的值:10
这和我们预料的结果不一致,那我们修改一下代码:
一个通常的解决方法是使用立即执行的函数表达式(IIFE)来捕获每次迭代时i的值。
for (var i = 0; i < 10; i++) {
(function(i) {
setTimeout(function() { console.log(i); }, 100 * i);
})(i);
}
得出结果如下:
或者可以使用闭包的方式:
for(var i=0;i<10;i++){
setTimeout(
(function(i){
console.log("每一次的值:",i);
})(i),
i*100);
}
得出的结果如下:
那么如果使用let声明变量,那么如下:
当let声明出现在循环体里时拥有完全不同的行为。 不仅是在循环里引入了一个新的变量环境,而是针对每次迭代都会创建这样一个新作用域。
这就是let声明的块级作用域。
本次先到这,下次继续,如有错误,请指正,谢谢。