函数的调用时机不同,结果不同
一、举例
例子1
let a=1;
function(){
console.log(a);
}
//不打印,因为没有调用函数
例子2
let a=1;
function(){
console.log(a);
}
fn()
//打印1
例子3
let a=1;
function(){
console.log(a);
}
fn()
a=2;
//打印1,执行函数,函数执行完才执行a=2
例子4
let a=1;
function(){
console.log(a)
}
a=2;
fn()
//打印2,重新赋值为2后,再执行函数
例子5
let a=1;
function(){
setTimeout(()=>{
console.log(a);
},0)
}
fn();
a=2;
//打印2,setTimeout表示过一段时间之后再执行,此时整个程序已经运行完,此时,再打印
例子6
let i=0;
for(i=0;i<6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
//打印出6个6,在等待setTimeout这段时间是,已经执行了6次for循环,当要打印是,i=6
例子7
for(let i=0;i<6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
//打印出0,1,2,3,4,5;因为JS在for和let一起用的时候会加东西,每次循环会多创建一个i;也就是每次循环得到的结果都被保留下来了。
将let改为var时,结果仍未6个6
二、打印出0,1,2,3,4,5的其他方法
1.上面的例7
for(let i=0;i<6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
2.立即执行函数
for(var i=0;i<6;i++){
(function(j){
setTimeout(() => {
console.log(j)
}, 0)
})(i)
}
//每次执行函数时,将i变量执行到定时器中
3.给定时器传入第三个参数
for(var i=0;i<6;i++){
setTimeout((j) => {
console.log(j)
}, 0, i)
}