很明显你是理解错了执行的先后顺序,你这样测试下:
$scope.callback=function(){
console.log($scope.phones)//输出undefined
console.log(test)//输出空Object
}
var test=new Object();
$http.get('phones/phones.json').success(function(data)
{
$scope.phones = data;
test = data;
console.log($scope.phones)//正常输出JSON对象
console.log(test)//正常输出JSON对象
$scope.callback();//换句话就是,ajax请求如果你没设定同步的话,请求后面定义的代码会先执行
});