JS中for循环中使用同一变量的方法及案例

news/2024/7/19 14:57:08 标签: javascript, js

JS中for循环中使用同一变量的方法及案例

for循环中加函数不能调用定义的变量?一个函数居然要加俩个变量,而且还没用?这不能忍,这篇文章是我整理如何使用for循环的同一变量,需要可直接复制使用。
在这里插入图片描述


问题

如何用js实现移入移出div变色(源码在最下面)

最麻烦的写法:

<script>javascript">
    window.onload =function () {
        var div = document.getElementsByClassName('div');
        div[0].onmouseover=function () {
            div[0].style.backgroundColor='aquamarine';
        }
        div[0].onmouseout=function () {
            div[0].style.backgroundColor='pink';
        }
        div[1].onmouseover=function () {
            div[1].style.backgroundColor='aquamarine';
        }
        div[1].onmouseout=function () {
            div[1].style.backgroundColor='pink';
        }
        div[2].onmouseover=function () {
            div[2].style.backgroundColor='aquamarine';
        }
        div[2].onmouseout=function () {
            div[2].style.backgroundColor='pink';
        }
        div[3].onmouseover=function () {
            div[3].style.backgroundColor='aquamarine';
        }
        div[3].onmouseout=function () {
            div[3].style.backgroundColor='pink';
        }
        div[4].onmouseover=function () {
            div[4].style.backgroundColor='aquamarine';
        }
        div[4].onmouseout=function () {
            div[4].style.backgroundColor='pink';
        }
        div[5].onmouseover=function () {
            div[5].style.backgroundColor='aquamarine';
        }
        div[5].onmouseout=function () {
            div[5].style.backgroundColor='pink';
        }

    }
</script>

于是我想到了用for循环去做:

<script>javascript">
    window.onload = function () {
        var div = document.getElementsByClassName('div');
        for (var i = 0; i < 7; i++) {
            div[i].onmouseover = function () {
                for (var i = 0; i < 7; i++) {
                    div[i].style.backgroundColor = 'aquamarine';
                }
            }

            div[i].onmouseout = function () {
                for (var i = 0; i < 7; i++) {
                    div[i].style.backgroundColor = 'pink';
                }
            }
        }
    }
</script>

然后出现的效果却不是我想要

在这里插入图片描述

我们想要的是不是移入移出任意一个,那个颜色改变啊!那为什么这个不可以实现呢?

因为这个是两层for循环,而两个循环的变量都为i,但是它们是不一样的值,就像名字一样,难道我叫张三,他也叫张三,那我们就是同一个人吗?

显然不是,记住,函数内部的for循环和外部的for循环的变量不是同一个变量

下面我为大家整理了在JS用的比较多的解决方法


方法

方法一(使用较简单):使用let定义变量,let用来声明它的作用域的变量

        for (let i = 0; i < 10; i++) {
            div[i].onmouseout = function () {
                div[i].style.backgroundColor = 'pink';
            }
        }

方法二:分离作用域,再调用

        for (var i = 0; i < 10; i++) {
            a(i);
        }

        function a(n) {
            div[n].onmouseout = function () {
                div[n].style.backgroundColor = 'pink';
            }
        }

方法三:储存变量

        for (var i = 0; i < 10; i++) {
            div[i].index = i;
            div[i].onmouseout = function () {
                div[index].style.backgroundColor = 'pink';
            }
        }

方法四:闭包

        for (var i = 0; i < 10; i++) {
            (function (n) {
                div[n].onmouseout = function () {
                    div[n].style.backgroundColor = 'pink';
                };
            })(i);
        }

案例(这里用的是方法一)

代码如下:

    <style>
        .box {
            position: absolute;
            left: 50%;
            top: 50%;
            transform:translate(-50%,-50%);
            width: 420px;
            height: 260px;
        }
        .div {
            float: left;
            margin: 15px;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
    <script>javascript">
        window.onload =function () {
            var div = document.getElementsByClassName('div');
            for (let i =0;i<7;i++){
                div[i].onmouseover=function () {
                    div[i].style.backgroundColor='aquamarine';
                }
                div[i].onmouseout=function () {
                    div[i].style.backgroundColor='pink';
                }
            }
        }
    </script>
</head>
<body>
<div class="box">
    <div class="div"></div>
    <div class="div"></div>
    <div class="div"></div>
    <div class="div"></div>
    <div class="div"></div>
    <div class="div"></div>
</div>
</body>

效果图如下:
在这里插入图片描述


# 总结 上面的方法都是可以使用的,这些方法在很多地方都是可以使用,大家可以多多应用,大家也可以将这些方法些在我的案例里面去使用,加深对for循环的理解,这篇文章的目的是为了帮助大家理清循环的思路,让大家写JS的时能够简洁、美观,加强JS的实用性。

如果文章对你有帮助的话,请给我一个小小的点赞一波哦!每个赞和评论都是我编写文章的动力哦!


http://www.niftyadmin.cn/n/855582.html

相关文章

一分钟教你学会-Android Service、Intent Service

服务详解 Android的四大组件之一&#xff0c;服务是长期运行在后台的应用程序组件。服务不是进程&#xff0c;也不是线程&#xff0c;它和应用程序在同一个进程中&#xff0c;服务中不能做耗时操作&#xff0c;运行在主线程中。主要应用与后台播放音乐&#xff0c;定位服务&am…

对 resPickle 的改进

resPickle容易出现编码问题&#xff0c;所以进行了修正1fromSystem importConvert2fromSystem.IO importMemoryStream3fromSystem.Runtime.Serialization.Formatters.Binary importBinaryFormatter4importcopy_reg56_formatter BinaryFormatter()78def_unpickler(string):9byte…

Android嵌套滑动机制

概览 实现嵌套滑动有三种方案&#xff1a; 纯事件拦截与派发方案基于NestingScroll机制的实现方案基于CoordinatorLayout与Behavior的实现方案 第一种方案&#xff1a;灵活性最高&#xff0c;也最繁琐。因为事件的拦截是一锤子买卖&#xff0c;谁拦截了事件&#xff0c;当前手…

CSS实现DIV垂直水平居中

CSS实现DIV垂直水平居中 在页面设计中&#xff0c;很多地方都需要div的垂直水平居中&#xff0c;在前端开篇的学习中&#xff0c;也是使用较多的地方&#xff0c;所以我整理了三种方法帮助大家去解决问题&#xff0c;代码可直接使用&#xff0c;仅供参考学习。 方法 方法一&a…

Android P的新特性

Android P的新特性 室内WIFI定位 Android P增加了对RTT Wi-Fi协议的支持&#xff0c;以此作为室内定位的基础。 在支持硬件支持的Android P设备上&#xff0c;开启定位并且打开WIFI扫描后就可以使用该功能进行定位。应用可以测量与附近支持RTT的Wi-Fi接入点&#xff08;AP&am…

JavaScript和CSS在HTML文档中不同位置的区别

JavaScript和CSS在HTML文档中不同位置的区别一、浏览器是如何渲染HTML的&#xff1f;二、JS的运行机制总结JS在HTML中放在不同位置的地方会有什么问题呢&#xff1f;我将在这篇文章按照自己的理解为大家介绍一下浏览器渲染页面的顺序和JS的运行机制。&#xff08;一篇文章搞定如…

Android handle的难点问题及解答

1. 消息的使用 new Handler().postDelayed(new Runnable() {Overridepublic void run() {finish();overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);} }, 500);2. Looper 死循环为什么不会导致应用卡死&#xff1f; 线程默认没有Looper的&#xff0c;如…

今生,为你守侯到地老天荒

岁月的年轮&#xff0c;常常充满了各种各样的回忆&#xff0c;有些回忆&#xff0c;可以触动到心底最柔软的地方&#xff0c;于是&#xff0c;带着微微的醉遍数过往&#xff0c;醒时&#xff0c;却又泛着淡淡的惆怅&#xff0c;成长的心情&#xff0c;总是这样的彷徨。假日闲暇…