如何让函数直接调用自身?

时间:2014-04-10 13:43:02

标签: javascript

我有这个我定义的功能,一旦定义我执行它。有没有一种方法可以一次性结合定义和执行,因为这是唯一使用此功能的地方?

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

3 个答案:

答案 0 :(得分:2)

你的问题太复杂了。简单来说,根本不要创建一个函数。

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

如果你还想要一个功能,你可以像{<3}}一样使用

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

答案 1 :(得分:0)

(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 = [];
                }
    });
})();

答案 2 :(得分:0)

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

(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 = [];
        }
    });