Javascript 未定义向函数throw添加null条件

Javascript 未定义向函数throw添加null条件,javascript,angularjs,Javascript,Angularjs,我是Angular和JS的新手,我有一个函数可以加载一个简单的选择,如下所示: 角度Ctrl function detalleRegistrosCtrl($scope, apiService, notificationService, $rootScope, $location, $stateParams, $http, $state) { Dropzone.autoDiscover = false; $scope.catalogoPadre = $statePa

我是Angular和JS的新手,我有一个函数可以加载一个简单的选择,如下所示:

角度Ctrl

function detalleRegistrosCtrl($scope, apiService, notificationService, $rootScope, $location, $stateParams, $http, $state) {
        Dropzone.autoDiscover = false;
        $scope.catalogoPadre = $stateParams.catalogopadre;

        cargarCatalogo();


    $scope.regresar = function () {
        $state.go("root.catalogosgenericos");
    }


    function errorCatalogo(res) {
        bootbox.alert("Error al cargar el catalogo" + res.data);
    }

     function cargarCatalogo() {
         apiService.get("../../api/Catalogo/GetCatalogoPadre/" + $scope.Catalogo + "/", null,
            function (res) {

                $scope.Catalogos = res.data;
                $scope.selectedID = selected.ID;
            }, errorCatalogo);
问题是当我尝试将if条件添加到cargarCatalogo()函数中时。当我这样做时:

    if ($scope.catalogoPadre != null) {

     function cargarCatalogo() {
         apiService.get("../../api/Catalogo/GetCatalogoPadre/" + $scope.Catalogo + "/", null,
            function (res) {
                $scope.Catalogos = res.data;
                $scope.selectedID = selected.ID;
            }, errorCatalogo);
     }
我正在进入chrome控制台:

错误:未定义cargarCatalogo


有人能给我解释一下怎么了吗?我只是给函数添加了一个条件。

这很简单,因为
cargarCatalogo()
是在
if
语句中定义的

如果,则必须在
之外定义它

然后在使用它时,将函数调用包装在
if
语句中


如果在
If
中定义它,则在运行代码并执行If语句之前,永远不会定义它。因此它将抛出错误。

在调用
cargarCatalogo()
函数时添加条件,而不是在函数声明中包装条件。在您的
detalleRegistrosCtrl
上,已在调用该函数

Dropzone.autoDiscover = false;
$scope.catalogoPadre = $stateParams.catalogopadre;
if ($scope.catalogoPadre != null) {
    cargarCatalogo();
}

实际上
cargarCatalogo()调用的方法不在我的if语句中,
函数cargarCatalogo(){
在if内部,我没有发现任何问题,答案是正确的,因为您的函数定义本身在
if
内部,尚未执行,但您在此之前就调用了它。在第一种情况下,当您的函数在
if
外部时,您的控制器知道存在具有该名称的方法。