函数方法中的函数

function within a function approach

本文关键字:函数 方法      更新时间:2023-09-26

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

喜欢函数中的函数

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

在我看来,这让事情变得更加复杂。我们什么时候需要函数方法中的函数?就像上面的示例代码一样。

像这样的例子利用了JavaScript的闭包来实现所谓的"工厂"。这是一篇关于MDN的文章,讨论了关闭和工厂。

function checkGreater(limit) {
    return function(limit, item) {
        return item > limit;
    }.bind(this, limit);
}
在此示例中,这是一个工厂,它

返回一个函数,您可以将参数传递给该函数,并检查传递的参数是否大于传递给工厂的限制。下面是用法示例:

var greaterThanTen = checkGreater(10);

这将返回:

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

并将其存储到greaterThanTen.要bind的第一个参数称为函数的调用上下文,在这个简单的示例中,上下文是什么并不重要,因为它没有被使用,但可以通过使用 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);
}

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

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