• 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时,才会退出循环。


     

  • 相关阅读:
    算法导论2.37答案
    算法导论2.37的算法
    heavy dark读《《暗时间》》
    深入SetOP2函数
    c++标准库都有哪些文件
    c++ sort函数的用法
    深入char转换为int/unsigned int的内部机制分析
    顺序容器之vector
    java的动态代理机制详解
    java.lang.IllegalStateException: Web app root system property already set to different value
  • 原文地址:https://www.cnblogs.com/wyaocn/p/5827369.html
Copyright © 2020-2023  润新知