2014-04-10 6 views
0

나는 내가 정의한이 함수를 가지고 있으며 정의 된대로 실행한다. 이 함수가 사용되는 유일한 장소이기 때문에 한 번에 정의와 실행을 결합 할 수있는 방법이 있습니까?어떻게 함수를 직접 호출 할 수 있습니까?

$scope.examWatchCollection = function() { 
     $scope.$watchCollection('[config.examStatusId, config.examTypeId]', 
      function (newValue, oldValue) { 
       if (_o.checkWatch(newValue, oldValue)) { 
        _u.putConfigs($scope.config); 
        $scope.grid.backup = []; 
        $scope.grid.data = []; 
       } 
      }); 
    }; 

    $scope.examWatchCollection(); 
+1

:

심지어 전혀 함수를 만들고 단지, 음, 코드를 실행하지하는 것이 더 간단 할 수 있는가? – thefourtheye

+1

주위에'(...)()'를 넣으시겠습니까? – putvande

+0

글쎄, 나는 달리 달리게 할 수있는 방법을 모르겠다. – Melina

답변

3

문제가 너무 복잡해졌습니다. 간단히 말해서, 함수를 전혀 만들지 마라. 당신은 여전히 ​​기능을 원하는 경우

$scope.$watchCollection('[config.examStatusId, config.examTypeId]', 
    function(newValue, oldValue) { 
     if (_o.checkWatch(newValue, oldValue)) { 
      _u.putConfigs($scope.config); 
      $scope.grid.backup = []; 
      $scope.grid.data = []; 
     } 
    }); 

, 당신은 IIFE

(function() { 
    $scope.$watchCollection('[config.examStatusId, config.examTypeId]', 
     function(newValue, oldValue) { 
      if (_o.checkWatch(newValue, oldValue)) { 
       _u.putConfigs($scope.config); 
       $scope.grid.backup = []; 
       $scope.grid.data = []; 
      } 
     }); 
}()); 

번째 버전

다음과 같이 함수 객체를 생성하는 할 수 있습니다 후 즉시 호출합니다. 일반적으로 자바 스크립트에서 블록 범위가 없으므로 코드 조각에서 사용하는 변수의 범위를 제한하는 데 사용됩니다. 하지만 나는 첫 번째 옵션을 선택해야한다고 강력히 믿는다.

+0

고마워. 나는 몇 분 안에 받아 들일 것이다. – Melina

1
(function() { 
    $scope.$watchCollection('[config.examStatusId, config.examTypeId]', 
      function (newValue, oldValue) { 
       if (_o.checkWatch(newValue, oldValue)) { 
        _u.putConfigs($scope.config); 
        $scope.grid.backup = []; 
        $scope.grid.data = []; 
       } 
    }); 
})(); 
1

절대 사용하지 않으면 참조를 유지할 필요가 없습니다. 익명으로 정의하고 바로 실행하십시오 :

(function() { 
    $scope.$watchCollection('[config.examStatusId, config.examTypeId]', 
     function (newValue, oldValue) { 
      if (_o.checkWatch(newValue, oldValue)) { 
       _u.putConfigs($scope.config); 
       $scope.grid.backup = []; 
       $scope.grid.data = []; 
      } 
     }); 
}()); 

JavaScript에서는 함수가 다른 객체와 마찬가지로 객체입니다. 이름이나 함수 자체의 정의에서 실행할 수 있습니다. 이름으로 참조되거나 인라인으로 정의 된 모든 함수는 뒤에 괄호가 있으면 실행됩니다. 당신이 다음`examWatchCollection`에 할당하는 이유는

$scope.$watchCollection('[config.examStatusId, config.examTypeId]', 
    function (newValue, oldValue) { 
     if (_o.checkWatch(newValue, oldValue)) { 
      _u.putConfigs($scope.config); 
      $scope.grid.backup = []; 
      $scope.grid.data = []; 
     } 
    }); 
관련 문제