一、let-var在for循环中执行原理
1、var
for(var i = 1; i<=3; i++) {
setTimeout(function(){
console.log(i)
}, 1000)
}
执行结果 4,4,4
分析:每执行一次循环将setTimeout交给定时器模块处理,1秒后将任务放进异步队列里,闭包也会把当前的执行上下文环境给保存(全局的i);同步任务执行完毕,此时全局的i为4,主线程执行异步任务队列里3个异步任务console.log(i)
2、let
for(let i = 1; i<=3; i++) {
setTimeout(function(){
console.log(i)
}, 1000)
}
执行结果 1,2,3
分析:每执行一次循环将setTimeout交给定时器模块处理,1秒后将任务放进异步队列里,闭包也会把当前的执行上下文环境给保存(此时块级作用域里的i);同步任务执行完毕,主线程执行异步任务队列里3个异步任务console.log(i)
二、排序
const lessons = [{title: 'a', click: 10, price: 100}, {title: 'b', click: 100, price: 1000}, {title: 'c', click: 110, price: 1100}]
function order(field, type="asc") {
return function(a,b){
if(type === 'asc') {
return a[field] > b[field] ? 1 : -1;
} else {
return a[field] > b[field] ? -1 : 1;
}
}
}
let result = lessons.sort(order('price', 'asc'));
// let result = lessons.sort(order('price', 'des'));
// let result = lessons.sort(order('click', 'asc'));
console.table(result);