1.js与解析 与 new 的本质
var foo;
// var foo = 'aa'; // 预解析后 foo 为函数 赋值是在完成解析后 所以是 foo 值是 aa
console.log(foo); // 预解析后 foo 为函数
function foo() {
// return 1; //new默认返回值 是新实例对象 只要是基本数据类型 都不改变实例
return foo;
}
console.log((new foo()) instanceof foo);
2.for里面加定时器
for (var i = 0; i < 4; i++) {
setTimeout(function() {
console.log(i++)
}, 1000);
}
结果 4,5,6,7,因为 同步先行,异步靠后,for 结束时 i=4,然后开始调用4次定时器
for (var i = 0; i < 4; i++) {
! function(n) {
setTimeout(function() {
console.log(n++)
}, 1000);
}(i)
}
结果 0,1,2,3通过加一个闭包保护一个变量可以达到目的
也可把var 声明 换成 let声明变量 let 是块状作用域