Javascript定义全局变量

时间:2015-11-21 16:56:19

标签: javascript angularjs

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

   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);

2 个答案:

答案 0 :(得分:0)

即使声明了single_video,也没有定义它,即它没有定义调用第二个console.log()时的任何值。

实际上,你的第一个console.log被调用的时间晚于第二个,因为你刚刚定义了一些函数,但没有调用它们,因此没有设置值,比你调用“second console.log”更快。

答案 1 :(得分:0)

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

你应该谷歌" javascript async"或者" javascript回调"了解异步代码的工作原理。

总结一下,当你做" $ http.get"您向服务器发出HTTP请求,该请求将在一定时间后响应。当服务器响应时,您的" onSuccess"被调用,你的变量被设置。不是之前。

与此同时,第二次 console.log 将在初始化HTTP请求后立即执行 - 因此在服务器响应和" onSuccess"之前回调。