code: function modHasCircularDependency( source, target, visited ) {
          if ( !modIsAnalyzed( target ) ) {
              return CIRCULAR_DEP_UNREADY;
          }
  
          visited = visited || {};
          visited[ target ] = 1;
  
          var module = modModules[ target ];
  
          if ( target === source ) {
              return CIRCULAR_DEP_YES;
          }
  
          var deps = module && module.depMs;
          if ( deps ) {
              var len = deps.length;
  
              while ( len-- ) {
                  var depId = deps[ len ].absId;
                  if ( visited[ depId ] ) {
                      continue;
                  }
  
                  var state = modHasCircularDependency( source, depId, visited );
                  switch ( state ) {
                      case CIRCULAR_DEP_YES:
                      case CIRCULAR_DEP_UNREADY:
                          return state;
                  }
              }
          }
  
          return CIRCULAR_DEP_NO;
      }
docs: 判断source是否处于target的依赖链中
  
  @ignore
  @return {number}