一,关于 request
for(var i = 0; i < 5; i++){
requestAnimationFrame(() => console.log(i));
}
(1)换成let输出的结果就是01234。var时是函数作用域,异步函数在for循环结束后还未执行,函数作用域的i变成了5,所以结果就是55555。let执行时,因为块级作用域的缘故,每一次for循环都会产生一个块级作用域
(2)因为request是异步,所以for循环先执行完成(此时i=5)再执行request。
二,关于delete
let a = 1;
let obj = {
x: 1
}
delete a;
delete obj.x;
delete 2;
console.log(a);
console.log(obj.x);
console.log(2);
es6中的let和const定义变量是不会挂载到window对象上的。所以如果let和const定义的变量不能delete.
三,关于try,catch,finally
var i = 100;
function foo() {
bbb: try {
console.log("position1");
return i++; }
finally {
break bbb;
}
console.log("position2");
return i;
}
foo();
(1)如果try语句后面有finally,try中就算有break用来跳出语句块,也不管用
(2)只要有finally,不管try和catch语句中执行什么,一定会进入finally语句
(3)catch 和 finally 语句都是可选的,但你在使用 try 语句时必须至少使用一个(也就是try必须搭配catch或者finally)。