Javascript 如何使函数直接调用自身?

Javascript 如何使函数直接调用自身?,javascript,Javascript,我有这个我定义的函数,一旦它被定义,我就执行它。是否有一种方法可以一次性将定义和执行结合起来,因为这是唯一使用此函数的地方 $scope.examWatchCollection = function () { $scope.$watchCollection('[config.examStatusId, config.examTypeId]', function (newValue, oldValue) { if (_

我有这个我定义的函数,一旦它被定义,我就执行它。是否有一种方法可以一次性将定义和执行结合起来,因为这是唯一使用此函数的地方

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

你把问题复杂化了。简单地说,根本不创建函数

$scope.$watchCollection('[config.examStatusId, config.examTypeId]',
    function(newValue, oldValue) {
        if (_o.checkWatch(newValue, oldValue)) {
            _u.putConfigs($scope.config);
            $scope.grid.backup = [];
            $scope.grid.data = [];
        }
    });
如果你仍然想要一个函数,你可以这样做

(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中没有块范围。但我坚信您应该选择第一个选项。

如果您从未使用过它,那么您就不需要保留对它的引用。只需匿名定义并立即执行即可:

(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 = [];
                }
    });
})();
(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中,函数是与任何其他对象一样的对象。您可以从其名称或函数本身的定义执行它。如果函数后面有括号,则将执行任何函数,无论是通过名称引用的函数还是内嵌定义的函数

完全不创建函数,只执行代码可能更简单:

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

那你为什么要把它分配给
examWatchCollection
呢?把
(…)()
放在它周围?我不知道如何才能让它以其他方式运行。是的,不创建函数