改造下面的代码,使之输出0 - 9
for (var i = 0; i < 10; i++) { setTimeout(() => { console.log(i); }, 1000) }
1.块级作业域 let
for (let i = 0; i< 10; i++){ setTimeout(() => { console.log(i); }, 1000) }
2.闭包
for (var i = 0; i < 10; i++) { (i => { setTimeout(() => { console.log(i); }, 1000) })(i) }
3.立即执行函数
for (var i = 0; i < 10; i++) { setTimeout((() => { console.log(i); })(), 1000) }
4.函数
for (var i = 0; i < 10; i++) { setTimeout(console.log, 1000, i) }
5.call
for (var i = 0; i < 10; i++) { setTimeout(((i) => { console.log(i); }).call(Object.create(null),i), 1000) }
6.call
for (var i = 0; i < 10; i++) { setTimeout(((i) => { console.log(i); }).call(null,i), 1000) }
7.临时变量
for (var i = 0; i < 10; i++) { let _i = i setTimeout(() => { console.log(_i); }, 1000) }
8.Promise
for (var i = 0; i < 10; i++) { new Promise((resolve, reject) => reject(i)).catch(setTimeout((i) => { console.log(i); }, 1000)) }
9.try,catch
for (var i = 0; i < 10; i++) { try { throw i } catch(i) { setTimeout(() => { console.log(i); }, 1000) } }
10.eval
for (var i = 0; i < 10; i++) { setTimeout(eval('console.log(i)'), 1000) }