Member 12224528 Ответов: 1

Как я могу получить доступ к переменным внутри функции извне в angularjs


У меня есть две функции внутри контроллера, но я не могу печатать переменные вне этой функции .Как мы можем решить эту проблему?

var getlockerbalance=function(){

           $http.get("php/selectLOCKERBALANCE.php")
           .success(function(lockerbalance){
           $scope.lockerbalance1=lockerbalance;
            var   lastlockerbalance=$scope.lockerbalance1[0].LOCKERBALANCE;
          console.log(lastlockerbalance);

            })

         }


Что я уже пробовал:

<pre lang="Javascript">
var getlockerbalance=function(){
					
		       $http.get("php/selectLOCKERBALANCE.php")
		       .success(function(lockerbalance){
		       $scope.lockerbalance1=lockerbalance;
				var   lastlockerbalance=$scope.lockerbalance1[0].LOCKERBALANCE;
		      console.log(lastlockerbalance);
				
                })

console.log(lastlockerbalance);

Ошибка говорит о том, что lastlockerbalance в undefined

1 Ответов

Рейтинг:
12

Andy Lanng

все, что объявлено внутри { ... } (var, let, const), недоступно вне {..}.

Это называется областью действия. Почитайте об этом. Это очень важно!
Все, что вы хотели знать о JavaScript scope[^]

Чтобы получить доступ к нему вне области видимости, вы должны либо объявить его снаружи, либо расширить объект, который был объявлен снаружи (например, область видимости, но это обычно плохая практика).

Объявить вне области действия:

var   lastlockerbalance = null; //declared in outer scope so in available in outer & inner scope.
var getlockerbalance=function(){
	$http.get("php/selectLOCKERBALANCE.php")
	    .success(function(lockerbalance){
	        $scope.lockerbalance1=lockerbalance;
                //updated in inner scope still updates the outer var
		lastlockerbalance=$scope.lockerbalance1[0].LOCKERBALANCE;
		console.log(lastlockerbalance);
	    })

console.log(lastlockerbalance);


Высокий звук. это расширение объекта, объявленного вне области видимости (почти то же самое, если вы поняли область видимости и dom:
var   item = {}; //declared in outer scope so in available in outer & inner scope.
var getlockerbalance=function(){
	$http.get("php/selectLOCKERBALANCE.php")
	    .success(function(lockerbalance){
	        $scope.lockerbalance1=lockerbalance;
                //simply add a property to the item object
		item.lastlockerbalance=$scope.lockerbalance1[0].LOCKERBALANCE;
		console.log(lastlockerbalance);
	    })

console.log(item.lastlockerbalance);


Пожалуйста, не берите в привычку делать вторую версию. Если вы это сделаете, то вы всегда должны сначала объявить свойство objects:
var item = {lastlockerbalance:null};
или
var $scope.item = {lastlockerbalance:null};

надеюсь, это поможет
Энди ^_^


Karthik_Mahalingam

5