我多次看过这样的代码:
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
。过了一会儿,我得出结论类似于关闭,现在我想知道这是否只是另一种写同样的事情。
答案 0 :(得分:1)
在您的示例中,它的行为完全相同,因为这两个函数都可以访问不再可编辑的封装值。
但通常我会说闭包更强大,因为它不仅限于参数值。
通过/
- 方法对其进行字符串化时,知道绑定函数为[native code]
也是一件好事。
答案 1 :(得分:1)
我认为你可以称之为异域风情。我不知道确切的定义,但我相信它只是在运行时将参数绑定到函数的范围。我们使用它来进行依赖注入,以便将所有依赖项都放到根范围内。
指定了 null
,因为参数没有绑定到任何特定的上下文,因此您的示例等同于从something(3, 1, 2)
内部查看时调用something()
,但您不需要声明运行时1, 2
。
这是一个很好的视频,展示了它在实践中使用的一个例子:https://www.youtube.com/watch?v=-kpEP4JeEdc(开始大约7分钟)。