JS中循环逻辑和判断逻辑的使用实例
源代码见:
https://github.com/Embrace830/JSExample
&&和||的理解
a || b:如果a是true,那么b不管是true还是false,都返回true。因此不用判断b了,这个时候刚好判断到a,因此返回a。
如果a是false,那么就要判断b,如果b是true,那么返回true,如果b是false,返回false,其实不就是返回b了吗。
a && b:如果a是false,那么b不管是true还是false,都返回false,因此不用判断b了,这个时候刚好判断到a,因此返回a。
如果a是true,那么就要在判断b,和刚刚一样,不管b是true是false,都返回b。
判断逻辑,因为重置按钮需要清空之前的style,这里用if语句也可以,但是比较繁琐,所以采用了与门操作符,好处就是代码量比较少。
this.index === btns.length - 1 && (content.style.cssText = "");
 function changeAttr(elem, attr, sty) {
      elem.style[attr] = sty;
  }
      window.onload = function () {
          var content = document.getElementById('content');
          var btns = document.getElementsByClassName("btn");
          var styles = ["200px", "200px", "red", "none", "block"];
          var attrs = ["width", "height", "background", "display", "display"];
          for( var i = 0; i < btns.length; i++){
             btns[i].index = i;
             btns[i].onclick = function () {
             this.index === btns.length - 1 && (content.style.cssText = "");
             alert(this.index);
         alert(i);//5
             changeAttr(content, attrs[this.index], styles[this.index]);//this.index改为i时功能无法实现,由于触发onclick事件时,i已经完成遍历值为5
             }
          }
       }
对于上述代码中的红色问题,可用匿名函数(闭包)将每次遍历的 i 值传入函数,使其值始终保持在内存。
  for(var i=0;i<btn.length;i++){
    (function(n){
       btn[n].onclick=function(){
         n===btn.length-1&&(show.style.cssText="");
         change(show,style[n],attr[n]);
       }
     })(i)
 }     
JS中循环逻辑和判断逻辑的使用实例的更多相关文章
- 研究分析JS中的三种逻辑语句
		JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10; ... 
- 【JS中循环嵌套常见的六大经典例题+六大图形题,你知道哪几个?】
		首先,了解一下循环嵌套的特点:外层循环转一次,内层循环转一圈. 在上一篇随笔中详细介绍了JS中的分支结构和循环结构,我们来简单的回顾一下For循环结构: 1.for循环有三个表达式,分别为: ①定义循 ... 
- JS中,如何判断一个被转换的数是否是NaN
		var x="abc"; //isNaN()函数判断是否是NaN if (isNaN(parseInt(x))) { alert("非数字"); } else{ ... 
- JS中循环绑定遇到的问题及解决方法
		本文是原创文章,如需转载,请注明文章出处 在工作中,有时会有这样的需求:在一个页面上添加了6个按钮,然后分别为他们绑定点击事件监听器,当点击按钮1时,输出1,当点击按钮2时,输出2. 循环绑定代码如下 ... 
- 通过日期在js中求出判断间隔天数,周期等实现分享
		在我们在项目的时候,可能出现这样的一种情况,有一个开始时间和一个结束时间,而这两个时间用$('#StartTime').val(); 取出来的时候又是datetime 类型,我们需要求这个时间中的间隔 ... 
- 关于js中undefined的判断
		在开发中遇到一个情景,当添加用户的时候不需要传入用户id,如果是修改那么需要传入id,因为用的是angular框架,参数是早就定义好了的,那么在新增用户的时候就会出现undefined的情况,之前我一 ... 
- 图解js中常用的判断浏览器窗体、用户屏幕可视区域大小位置的方法
		有时我们需要获得浏览器窗口或屏幕的大小.窗口下拉框下拉的距离等数据,对应这些需求,js中提供了不少解决方法,只是数量稍多容易混淆它们各自的意义,下面咱们用图例来解释下12个常见对象属性的作用. 其中有 ... 
- js中int和string数据类型互相转化实例
		今天做项目的时候,碰到一个问题,需要把String类型的变量转化成int类型的.按照常规,我写了var i = Integer.parseInt("112");但控制台报错,说是“ ... 
- 关于js中循环遍历中顺序执行多个嵌套ajax的问题
		就是业务上需要完成一个功能,这个功能需要依次调用四个接口,后面接口的参数都依赖于前一个接口的返回值. 类似这样: var objArr = "从其他逻辑获得"; for(var n ... 
随机推荐
- 如何清除浮动塌陷? float:left 塌陷
			参考文章: http://www.jb51.net/css/502268.html 原文链接:http://www.jianshu.com/p/a0500b54da13 只要给li的宽度, 规定得小一 ... 
- thinkphp留言板开发笔记 1 - 新的
			关于php数组的排序函数的总结: 有很多种排序方式和排序规则: 正常排序和反向排序, 使用 -r来表示 排序时是否考虑索引/下标, 如果考虑则加上-a, a=associate. sort是按值来排序 ... 
- What are the differences between Flyweight and Object Pool patterns?
			What are the differences between Flyweight and Object Pool patterns? They differ in the way they are ... 
- C#   选择文件、选择文件夹、打开文件(或者文件夹)         路径中获取文件全路径、目录、扩展名、文件名称   追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!
			https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ... 
- (转) GAN应用情况调研
			本文转自: https://mp.weixin.qq.com/s?__biz=MzA5MDMwMTIyNQ==&mid=2649290778&idx=1&sn=9816b862 ... 
- hosts文件介绍
			在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\ ... 
- 集成算法——Ensemble learning
			目的:让机器学习效果更好,单个不行,群殴啊! Bagging:训练多个分类器取平均 Boosting:从弱学习器开始加强,通过加权来进行训练 (加入一棵树,比原来要强) Stacking:聚合多个分类 ... 
- React-navigation物理返回键提示效果BackHandler
			componentWillMount(){ BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid); } co ... 
- unity shader base pass and additional pass
			[Unity Shaders]Shader中的光照,shadersshader 写在前面 自己写过Vertex & Fragment Shader的童鞋,大概都会对Unity的光照痛恨不已 ... 
- Redis 个人理解总结
			一.什么是Redis ? Redis(remote dictionnary server)是一个key-value存储系统.Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可 ... 
