【问题标题】:Higher order function name高阶函数名称
【发布时间】:2014-05-15 11:50:35
【问题描述】:

我刚刚写了这个函数来回答 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 有一个这样的函数?

【问题讨论】:

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


    【解决方案1】:

    这个函数有名字吗

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

    您可以使用下划线编写它的简单版本

    是的,你在里面做的是基本的函数组合,所以你可以使用Underscore的compose function

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

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      相关资源
      最近更新 更多