code: function onHistoryChange(location) {
          const execList = [];
          ruleList.forEach(item => {
              const {rule, ruleKey, callbacks: {onMatch, onBreakMatch}} = item;
              const match = matchRule(location, rule);
              if (match && !isEqual(pick(item.matchLog[0], compareMatchKeys), pick(match, compareMatchKeys))) {
                  onMatch && execList.push({ruleKey, onMatch: onMatch.bind(null, match, [...item.matchLog])});
                  item.matchLog.unshift(match);
              }
              else if (!match && item.matchLog.length) {
                  onBreakMatch && execList.push({ruleKey, onBreakMatch: onBreakMatch.bind(null, [...item.matchLog])});
                  item.matchLog = [];
              }
          });
          // 先执行onBreakMatch，执行顺序按注册顺序从晚到早
          [...execList].reverse().forEach(item => {
              item.onBreakMatch && item.onBreakMatch();
          });
          // 再执行onMatch
          execList.forEach(item => {
              item.onMatch && item.onMatch();
          });
      }
docs: 监听history change