【问题标题】:Explain bindbind() function解释 bindbind() 函数
【发布时间】:2012-11-10 09:26:21
【问题描述】:

谁能解释一下这个函数?

var bindbind = Function.prototype.bind.bind(Function.prototype.bind);

我了解它产生的结果:

var bindedContextFunc = bindbind(function)(context);
bindedContextFunc(args);

但是不明白创建这个函数的过程,我的意思是部分bind(Function.prototype.bind)

【问题讨论】:

  • "context" 最好是 "thisValue" 或类似的。
  • @RobG:“context”有什么问题?我看到它经常使用,我认为它比技术术语更具描述性。你有我(我们)阅读的链接吗?
  • 在 ECMAScript 中,“context”用于execution context,包括当前执行代码的所有参数和范围。它包括一个this 值,并由代码的编写方式控制。它是静态的。相反,函数的this 值是动态的,完全由函数的调用方式设置,与函数的声明或初始化方式无关。所以称“this”上下文是不合适的。这样做的人需要阅读并理解他们所使用的语言的规范。
  • @RobG 有趣的信息,谢谢。但是在更高级别(不知道行为细节)this 看起来与“上下文”完全一样。

标签: javascript functional-programming function-binding


【解决方案1】:

好的。我们这里有三倍的Function.prototype.bind 函数,其(简化)代码

function bind(context) {
    var fn = this;
    return function() {
        return fn.apply(context, arguments);
    }
}

我将使用更多的部分应用程序以更实用的样式进行缩写:bindfn(context) -> fncontext

那么它有什么作用呢?你有 bind.call(bind, bind) 或 bindbind(bind)。让我们将其扩展为 bindbind。如果我们现在给它提供一些参数呢?

绑定绑定(绑定)(fn)(上下文)

绑定绑定(fn)(上下文)

绑定fn(上下文)

fn上下文

我们到了。我们可以将它分配给一些变量以使结果更清晰:

bindbind = 绑定绑定(绑定)

bindfn = bindbind任何东西(fn) //bindfn

contextbindfn = bindfnanything(context) // fncontext

result = contextbindfnanything(args) //fncontext(args)

【讨论】:

  • 如果我们可以通过fn.bind(context)(args) 来获得相同的结果,您能否详细说明为什么这个解决方案更好(或者我应该问为什么它存在)?
  • 假设你有一个 API 想要返回 bindfn - 它还不知道上下文。然后你可以使用Function.prototype.bind.bind(fn) - 这很长 - 或者只是bindbind(fn)。不过,不确定是否有真实世界的应用程序。
猜你喜欢
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多