JS 函数的执行时机

103 阅读1分钟

函数的调用时机不同,结果不同

一、举例

例子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)
}