当第一个param为null时,.bind()和闭包是一样的吗?

时间:2017-10-16 16:31:24

标签: javascript

我多次看过这样的代码:

function something(a,b,c) {
    return a+b+c // or something else with a,b,c
}.bind(null, 1, 2);
...
something(3);

这和返回一个闭包是一样的吗?

function something(a,b,c) {
    return function(c) {
        return a + b + c;
    }
}

let binded = something(1,2);
binded(3);

我对这种代码感到有点困惑,因为文档说它用于绑定this,但在这些情况下,第一个参数是null。过了一会儿,我得出结论类似于关闭,现在我想知道这是否只是另一种写同样的事情。

2 个答案:

答案 0 :(得分:1)

在您的示例中,它的行为完全相同,因为这两个函数都可以访问不再可编辑的封装值。

但通常我会说闭包更强大,因为它不仅限于参数值。

通过/ - 方法对其进行字符串化时,知道绑定函数为[native code]也是一件好事。

答案 1 :(得分:1)

我认为你可以称之为异域风情。我不知道确切的定义,但我相信它只是在运行时将参数绑定到函数的范围。我们使用它来进行依赖注入,以便将所有依赖项都放到根范围内。

指定了

null,因为参数没有绑定到任何特定的上下文,因此您的示例等同于从something(3, 1, 2)内部查看时调用something(),但您不需要声明运行时1, 2

这是一个很好的视频,展示了它在实践中使用的一个例子:https://www.youtube.com/watch?v=-kpEP4JeEdc(开始大约7分钟)。