高阶函数名称

时间:2014-05-15 11:50:36

标签: javascript angularjs underscore.js higher-order-functions

我刚刚写了这个函数来回答SO:

function ngWrap($scope, fn) {
    return function() {
        var args = [].slice.call(arguments);
        return $scope.$apply(function() {
            fn.apply(null, args);
        });
    };
}

有更好的版本:

function ngWrap($scope, fn) {
    return function() {
        var args = [].slice.call(arguments);
        if ($scope.$$phase) {
            fn.apply(null, args);
        } else {
            return $scope.$apply(function() {
                fn.apply(null, args);
            });
        }
    };
}

可以用来缩短它:

socket.on('myevent', function(arg){$scope.$apply(function(){trigger_fn(arg)})})

成:

socket.on('myevent', ngWrap($scope, trigger_fn));

这个函数是否有一个名称(第一个)或者你可以使用下划线(只能使用$scope.$apply.bind($scope)作为参数)编写它的简单版本,或者lisp有一个单词的函数吗?

1 个答案:

答案 0 :(得分:1)

  

此功能是否具有名称

不是我知道,但我可以想到“将fn提升到Angular $scope”左右。

  

您可以使用下划线

编写它的简单版本

是的,你在那里做的是基本的功能组成,所以你可以使用下划线的compose function

function ngWrap($scope, fn) {
    return _.compose($scope.$apply.bind($scope), fn);
}