当前位置: 首页 > news >正文

return false

DOM的事件传播有两个类型,一个是捕获(从父节点到子节点),一个是冒泡(从子节点到父节点),所以一个事件触发时可以有多个处理器去处理它,DOM标准约定了return false后就会阻止事件继续传播。

jQuery中each里面用return false代替break;return ture 代替continue。

function a(){

     if(true){

         //

         return true;

     }  

}

在一个function里有一个each,在each里某种条件 成立的话,就把这个function返回true或者false。
但是在each代码块内不能使用break和continue,要实现break和continue的功能的话,要使用其它的方式 
break----用return false; 
continue --用return ture; 
所以在each里想使用return true给这个function返回时,其实只是让each继续执行而以 
连each都没有中断,所以function也就不能return了 。 

 

由于jQuery的each是通过循环调用回调函数的方式实现的,所以在函数内写的break只适用于函数内部的逻辑,并不能对函数外层的循环起到作用,所以break不管用。具体可以分析一下jQuery的源码,下面以jQuery2.1.4中的each方法举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
each:  function ( obj, callback, args ) {
  var  value,
   i = 0,
   length = obj.length,
   isArray = isArraylike( obj ); //如果obj是一个类似数组的结构(可用for遍历的),则为true
 
  if  ( args ) {
   if  ( isArray ) {
      for  ( ; i < length; i++ ) {
       value = callback.apply( obj[ i ], args ); //循环调用
 
       if  ( value ===  false  ) { //如果返回值全等于(包括类型和值)false,就退出循环
         break ;
       }
      }
    else  {
        for  ( i  in  obj ) { //这种是对象的,需要用for in遍历
          value = callback.apply( obj[ i ], args );
 
          if  ( value ===  false  ) {
            break ;
          }
        }
      }
  // A special, fast, case for the most common use of each
  else  {
     if  ( isArray ) {
        for  ( ; i < length; i++ ) {
           value = callback.call( obj[ i ], i, obj[ i ] );
           if  ( value ===  false  ) {
              break ;
           }
        }
      else  {
         for  ( i  in  obj ) {
            value = callback.call( obj[ i ], i, obj[ i ] );
  
            if  ( value ===  false  ) {
              break ;
            }
         }
       }
    }
  return  obj;
}

 

由源码可以看出,只有回调函数返回的值为false时,才会退出循环。


 

转载于:https://www.cnblogs.com/wyaocn/p/5827369.html

相关文章:

  • Ubuntukylin-14.04-desktop( 不带分区)安装步骤详解
  • 1:CSS中一些@规则的用法小结 2: @media用法详解
  • 【框架】[Spring]AOP拦截-三种方式实现自动代理
  • Linux下,基于EETI触屏控制器的触屏失灵解决方法
  • jquery的height()和javascript的height总结,js获取屏幕高度
  • 搭建NPM私服
  • java自动关闭资源
  • Spring+SpringMvc+Mybatis框架集成搭建教程四(项目部署及测试)
  • JS继承之寄生类继承
  • protobuf-c的使用(二)使用
  • 音视频同步(播放)原理
  • AutoCAD 2014 新特性概览
  • jvm实例,tomcat容器,spring容器,在内存中的关系
  • uboot在s3c2440上的移植(4)
  • Xamarin调用谷歌地图以及百度地图api key申请时的SHA1值
  • Google 是如何开发 Web 框架的
  • Apache Pulsar 2.1 重磅发布
  • chrome扩展demo1-小时钟
  • classpath对获取配置文件的影响
  • JavaScript 基本功--面试宝典
  • linux安装openssl、swoole等扩展的具体步骤
  • React中的“虫洞”——Context
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue2.x学习三:事件处理生命周期钩子
  • 阿里云购买磁盘后挂载
  • 给初学者:JavaScript 中数组操作注意点
  • 基于HAProxy的高性能缓存服务器nuster
  • 简单实现一个textarea自适应高度
  • 聊聊hikari连接池的leakDetectionThreshold
  • 排序算法之--选择排序
  • 如何利用MongoDB打造TOP榜小程序
  • 思考 CSS 架构
  • 学习笔记TF060:图像语音结合,看图说话
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 阿里云ACE认证学习知识点梳理
  • 阿里云服务器购买完整流程
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #控制台大学课堂点名问题_课堂随机点名
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (剑指Offer)面试题34:丑数
  • (新)网络工程师考点串讲与真题详解
  • (转)大型网站架构演变和知识体系
  • (转)可以带来幸福的一本书
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core 项目指定SDK版本
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net FrameWork总结
  • .NET Micro Framework初体验
  • .NET 表达式计算:Expression Evaluator