美文网首页
JavaScript----同步异步和排他思想

JavaScript----同步异步和排他思想

作者: AuglyXu | 来源:发表于2018-11-10 13:10 被阅读0次

    同步和异步

    • 同步就是先后执行,只有当当前的执行完,才能执行下一个,好比一个隧道只能一辆车一辆车的过
    • 异步就是同时执行,好比一个隧道可以同时驶过两辆车
    • 注意点:
      • 默认的所有的代码都是同步操作的
      • 默认的所有的函数调用都是异步的
    • 经典案例
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>93-同步和异步</title>
    </head>
    <body>
    <button>我是第1个按钮</button>
    <button>我是第2个按钮</button>
    <button>我是第3个按钮</button>
    <button>我是第4个按钮</button>
    <button>我是第5个按钮</button>
    <script>
    var btns = document.querySelectorAll("button");
    for(var i = 0,len = btns.length;i<len;i++){
          btns[i].onclick = function(){
          console.log("我是第",i,"个按钮")
      }
    }
    //当按下按钮的时候永远输出我是第5个按钮
    </script>
    
    • 解释: 当函数调用的时候,for循环已经执行完毕,执行完毕后的i永远等于5

    解决方案

    • 使用闭包, 保存每次循环的值, 实现异步效果
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>93-同步和异步</title>
    </head>
    <body>
    <button>我是第1个按钮</button>
    <button>我是第2个按钮</button>
    <button>我是第3个按钮</button>
    <button>我是第4个按钮</button>
    <button>我是第5个按钮</button>
    <script>
    var btns = document.querySelectorAll("button");
    for(var i = 0,len = btns.length;i<len;i++){
         (function(index){
           btns[index].onclick = function(){
          console.log("我是第",index,"个按钮")
      }
    })(i)
    }
    </script>
    </body>
    </html>
    
    • 解析: 当执行for循环后,执行自调函数,将参数i传递给index, 由于点击事件的函数用到了外界的index, 因此index得以被保存, 同样i的值也被记录下来
    • 这里的自调函数是0级作用域, 自调函数内的函数是一级作用域, 点击时间的函数是二级作用域
    (function(index){
           btns[index].onclick = function(){
          console.log("我是第",index,"个按钮")
      }
    })(i)
    
    //等价于
    function test(index){
           btns[index].onclick = function(){
          console.log("我是第",index,"个按钮")
      }
    }
    test(i)
    

    排他思想

    • 需求: 鼠标移到哪个li上面, li的背景颜色变红,并且其他的背景颜色为白色
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>94-高级排它</title>
        <style>
            .selected{
                background: red;
            }
        </style>
    </head>
    <body>
    <ul>
        <li class="selected">我是第1个li</li>
        <li>我是第2个li</li>
        <li>我是第3个li</li>
        <li>我是第4个li</li>
        <li>我是第5个li</li>
    </ul>
    <script>
    var oLis = document.querySelectorAll("ul>li");
    var currentIndex = 0;
    for(var i = 0,len = oLis.length;i < len;i++){
      (function(index){
        oLis[index].onmouseenter = function(){
        this.className = ".select"
        oLis[currentIndex].className = ""
        currentIndex = index.
      })(i)
    }
    </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:JavaScript----同步异步和排他思想

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