函数方法中的函数

时间:2015-06-17 16:32:02

标签: javascript

最近我开始调用函数式编程,我学习了call(),bind()和apply()..但我仍然不太明白因为我从未在Javascript中使用函数式编程方法。

类似函数中的函数

function checkGreater(limit){
    return function(limit, item){
        return item > limit;
    }.bind(this,limit);

}

听起来它让事情变得更复杂。我们何时需要函数方法中的函数?像上面的示例代码。

1 个答案:

答案 0 :(得分:1)

这样的示例利用JavaScript的闭包来实现所谓的" factory"。 Here's an article on MDN that discusses closures and factories

function checkGreater(limit) {
    return function(limit, item) {
        return item > limit;
    }.bind(this, limit);
}

在此示例中,这是一个工厂,它返回一个可以传递参数的函数,并检查传递的参数是否大于传递给工厂的限制。以下是使用示例:

var greaterThanTen = checkGreater(10);

返回:

function (10, item) {
    return item > 10;
}

并将其存储到greaterThanTenbind的第一个参数称为函数的调用上下文,在这个简单的示例中,由于上下文没有被使用,所以它实际上并不重要,但可以引用通过使用this关键字在函数内部。

然后您可以像这样使用greaterThanTen

if (greaterThanTen(5)) {
    console.log('5 is greater than 10'); // never gets called
}

if (greaterThanTen(11)) {
    console.log('11 is greater than 10'); // this gets called
}

但是,如果我要写自己的工厂来做这件事,我可能会这样写:

function checkGreater(limit) {
    return function(item) {
        return item > this;
    }.bind(limit);
}

这与上面的示例完全相同,只是工厂使用内部函数的调用上下文来设置限制。

请注意,在strict mode中,这将完全按预期工作。但是,"松散"模式,this将被强制转换为new Number(limit),这不是原始值,无法使用严格相等运算符===进行比较。感谢@FelixKling提醒我这个陷阱。