在以下 Angular Material 代码中了解此延迟语法及其用途

Understanding this deferred syntax and its purpose in the below Angular Material code

Angular Material 的自动完成演示代码包含以下我试图理解的代码:

function querySearch (query) {
  var results = query ? self.states.filter( createFilterFor(query) ) : self.states,
      deferred;
  if (self.simulateQuery) {
    deferred = $q.defer();
    $timeout(function () { deferred.resolve( results ); }, Math.random() * 1000, false);
    return deferred.promise;
  } else {
    return results;
  }
}

具体来说,, deferred部分在var results = query ? self.states.filter( createFilterFor(query) ) : self.states, deferred;中的作用是什么?此时 deferred 对象甚至还没有被 $q.defer(); 定义。

它是一个 var declaration,具有 results 变量的巨大初始化程序,而 deferred 变量没有初始化程序。

同样可以这样写

var results = query ? self.states.filter( createFilterFor(query) ) : self.states;
var deferred;

var results, deferred;
results = query ? self.states.filter( createFilterFor(query) ) : self.states;