2015-11-21 210 views
-1

我想在控制器函数的外部使用single_video变量。它在第一个控制台日志中打印良好。但是它给出了single_video是第二个console.log中的未定义错误,它在控制器函数之外。我对javascript和angularjs都很穷。Javascript定义全局变量

var single_video; 
    var app = angular.module('myApp', []); 
    app.controller('randomVideo', function($scope, $http) { 
     var onSuccess = function(response){ 
      $scope.video = response.data; 
      single_video = $scope.video; 
      //First console.log 
      console.log('1st ID='+single_video.yt_id); 
     }; 
     var onError = function(reason){ 
      $scope.error = "There is an error about getting random_video.php"; 
     }; 
     $http.get("http://www.ytmdb.com/ytvideo/api/random_video.php") 
     .then(onSuccess, onError); 
    }); 
    //Second console.log 
    console.log('2nd ID='+single_video.yt_id); 
+0

它如何在第二个控制台中打印,除非它有价值? – azad

回答

0

即使single_video被声明,但并不限定的,即它不”已在调用第二的console.log的时间定义的任何值()。

事实上,第一个console.log的调用时间晚于第二个,因为您只是定义了一些函数,但没有调用它们,因此没有设置值,所以您比第二次调用“console.log”更快。

0

你的变量没有问题。 我想你的第二个console.log在第一个之前被调用。

你应该谷歌“JavaScript异步”或“JavaScript回调”了解异步代码的工作原理。总之,当你做“$ http.get”时,你向服务器发出一个HTTP请求,服务器会在一段时间后作出响应。当服务器响应时,你的“onSuccess”被调用,并且你的变量被设置。之前没有。

与此同时,你的第二个console.log将在初始化HTTP请求后立即执行 - 所以在服务器响应和“onSuccess”回调之前。