setTimeout(function() {
console.log(1);
}, 0);
new Promise(function executor(resolve) {
console.log(2);
for (var i = 0; i < 10000; i++) {
resolve();
}
console.log(3);
}).then(function() {
console.log(4);
});
console.log(5);
输出:2 3 5 4 1
function print(n){
for(var i = 0;i <n;i++){
setTimeout(console.log, 1000, i);
}
}
print(10);
输出:0 1 2 3 4 5 6 7 8 9(1s后全都一起输出了)
补充: 改写成每隔1s打印1个数字的形式
(1)let
for (let i = 0; i< 10; i++){
setTimeout(() => {
console.log(i);
}, 1000*i)
}
(2)自动执行函数
for (var i = 0; i< 10; i++){
(function(i){
setTimeout(() => {console.log(i); }, 1000*i)
})(i)
}
(3)setTimeout()带参数形式
for (var i = 0; i< 10; i++){
setTimeout(((i) => {
console.log(i);
})(i), 1000*i)
}
//或者
for (var i = 0; i < 10; i++) {
setTimeout(console.log, 1000*i, i)
}
(4)promise
for (var i = 0; i < 10; i++) {
myPromise(i);
}
function myPromise(i) {
return new Promise((resolve) => {
setTimeout(() => {
console.log(i);
resolve(true);
}, 1000*i);
});
}
(5)生成器函数
for (var i = 0; i < 10; i++) {
timeoutGenerator(i).next();
}
function* timeoutGenerator (i) {
yield setTimeout(() => {
console.log(i);
}, 1000*i);
}
(6)async,await
async function init () {
for (var i = 0; i < 10; i++) {
await timeoutPromise(i);
}
}
function timeoutPromise (i) {
return new Promise((resolve) => {
setTimeout(() => {
console.log(i);
resolve(true);
}, 1000);
});
}
init();
作用域
var a = 20;
function bar() {
console.log(a);
}
function foo(fn) {
var a = 10;
fn();
}
foo(bar);
输出: 20
变量提升,相当于:
function foo(bar) {
function bar() {
console.log(a);
}
var a
bar();
a = 10;
}
function bar() {
var a = 20;
return function() {
console.log(a);
}
}
var foo = bar();
var a = 10;
foo();
输出:20
var a = 20;
function bar() {
console.log(a)
var a = 10;
console.log(a)
}
bar()
输出: undefined 10
const promise = new Promise((resolve, reject) => {
console.log(1);
resolve(5);
console.log(2);
}).then((res) => {
console.log(res);
})
promise.then(() => {
console.log(3);
})
console.log(4)
setTimeout(() => {
console.log(6)
})
输出:1 2 4 5 3 6