美文网首页
2020-11-07

2020-11-07

作者: 二荣xxx | 来源:发表于2020-11-07 17:03 被阅读0次

    JS 函数的执行时机

    函数的执行时机不同结果也会不同,js也分为同步执行和异步执行

    简单的举几个同步执行例子
    1、

    let a = 1
    function fn(){
    console.log(a)
    }
    fn()
    答案:a=1
    

    原因:a被赋值为1,调用fn打印出的a当然为1
    2、

    let a = 1
    function fn(){
    console.log(a)
    }
    a = 2
    fn()
    答案:a=2
    

    原因:a被赋值为2之后执行的fn
    3、

    let a = 1
    function fn(){
    console.log(a)
    }
    fn()
    a = 2
    答案:a=1
    

    原因:调用fn之后a才被赋值为2,在执行fn时a的值时1



    然后是异步执行的例子
    1、
    let a = 1
    function fn(){
    setTimeout(()=>{
    console.log(a)
    },0)
    }
    fn()
    a = 2
    答案:2
    

    原因:setTimeout是延迟执行的意思,在当前任务执行完成后再打印a的值,因此在调用fn时a的值为2,打印出的a的值就是2了
    2、

    let i = 0
    for(i = 0; i<6; i++){
    setTimeout(()=>{
    console.log(i)
    },0)
    }
    答案:6个6
    

    原因:for循环大家都知道,只有在条件不满足时才会结束循环,所以在i=6时跳出循环(i=5时又走了一个i++才跳出循环),此时才执行setTimeout,而循环执行了六次,因此打印出的结果为6个6
    3、

    for(let i = 0; i<6; i++){
        setTimeout(()=>{
            console.log(i)
        },0)
    }
    答案:1、2、3、4、5
    

    原因:每次循环 i 都会单独复制一份再setTimeout,console.log(i),因此此时打印的 i 就和大部分新人的想法一致了

    相关文章

      网友评论

          本文标题:2020-11-07

          本文链接:https://www.haomeiwen.com/subject/qiafbktx.html