美文网首页让前端飞
For循环中的异步问题(JS)

For循环中的异步问题(JS)

作者: 默非静语 | 来源:发表于2018-08-05 00:42 被阅读3次

for循环内外的变量值

先看一段代码

    for(var i=0;i<3;i++){
        console.log("内部:"+i);
    }
        console.log("外部:"+i);
结果:

不难理解,for循环执行了3次,在内部 i=0 到 1 到 2 ,当i加到3时,已经不再小于3。所以停止循环,i++不执行,在外部拿到的i=3;

通过循环给每个元素绑定事件


如图有三个圆,给每个元素绑定点击事件,并且点击变色。

HTML结构

    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>

JS

var oli = document.querySelectorAll("li");
for (var i=0;i<oli.length;i++) {
        oli[i].onclick = function () {
            this.style.backgroundColor = "red";
        }
}

步骤1:获取元素对象数组
步骤2:通过循环 给每个元素绑定点击事件
步骤3:元素点击时的元素变化

疑问? 这里的问什么使用this ,为什么不能用 oli[i] 去改变样式。

解答之前先看一个东西



原来点击事件是li对象的一个属性啊。
按照对象的概念,值可以存储各种数据以及函数。
在对象中,函数被称为方法。
可以看出,我们把自己写的匿名函数赋给了li对象的onclick属性。

如果没有绑定方法呢?

var oul = document.querySelector("ul");

打印出了null,并没有报错not definded 。可以看出这个事件属性已经事先定义好了。

循环与函数的异步问题

继续解答
for循环给每个元素绑定事件方法,那么函数内部与外部的为什么i变量为什么就不一样?
1.函数申明创建完,必须调用才能执行,也就是点击才会调用。
2.for循环一瞬间执行完,当点击时for循环已经执行完。
3.作用域问题

当我们点击时,如文章开头所写的案例一样,变量是完成循环之后的值。
关于作用域,申明一个函数时,其内部就有了局部作用域。当函数内部没有这个变量时,就会去外部找,一直找到全局变量。
当我们点击时,函数内部并没有i这个变量,就会去外部寻找,此时for已经执行完,我们并不能拿到我们想要的变量值。

我们写的自定义函数其实就相当于一个回调函数,由系统事件来调用,相当于在代码最后 调用 oli[i].onclick();

使用this
这里的this是指向了当前的元素本身,即一个对象,而不是指向当前函数。

相关文章

  • For循环中的异步问题(JS)

    for循环内外的变量值 先看一段代码 不难理解,for循环执行了3次,在内部 i=0 到 1 到 2 ,当i加到3...

  • js循环中的异步

    for循环await、async这样就没问题foreach不支持await,asyncmap:

  • JS基础(五)

    // 1. JS是单线程 解决方式 异步 // 2. 异步的解决方式 事件轮循 // 3. 事件轮循的核心-回调函...

  • js 循环中嵌套异步方法

  • 20211021

    1、js里的事件循环机制(event loop)答:js事件循环中有异步队列有两种:宏任务队列(macro)和微任...

  • 【js】异步和循环中的ajax不能执行的问题

    之前做论坛的时候在ajax里的异步和循环处卡了好久,当时学js的时候好像也没注意,现在回过头来又找黑马的视频了解了...

  • for循环中异步请求问题promise

    今天遇到一个需求就是,需要在for循环中,进行axios异步请求。一般这个这个时候就遇到两个问题 因为你的请求是在...

  • JS循环中 把异步转为同步

  • js 异步问题

    异步的概念 js的异步的概念的起因为js是单线程语言,一次只能同时做一件事。js和dom渲染公用同一个线程,因为j...

  • async的使用

    用过node.js 有时候一定会为js的异步问题感到头痛,之前写过一篇博客是用递归解决异步问题的, node.js...

网友评论

    本文标题:For循环中的异步问题(JS)

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