【问题标题】:Javascript currying: why does one closure scope example work, but another doesn't?Javascript currying:为什么一个闭包范围示例有效,而另一个无效?
【发布时间】:2014-11-10 06:24:29
【问题描述】:

我正在尝试理解 Vimeo 上的视频“Understanding Function Currying”(http://vimeo.com/41238143,但没有必要查看它来理解这个问题)。

我理解的例子

在视频的开头,我们被告知这段代码有问题:

此代码的问题:在第 11 行和第 14 行使用回调将不起作用,因为它超出了范围 - onSuccess 存在于 buildCRUD 范围内,而不是create 范围。 (我称之为“回调示例”。)

好的,这对我来说很有意义。考虑的解决方案包括使用单个类变量(我知道这个术语已关闭,因为 javascript 没有类,但你知道我的意思)。

我看不懂的例子

这就是我感到困惑的地方。在视频的最后,我们被告知该函数不同部分的代码将起作用。 (注意 "className" 变量参数;我将其称为“className 示例”。)

(对不起,我切断了写着“var ...”的行,请相信我,它就在那里,createFngetFn 等都是被声明为长“var”行的一部分。)

如您所见,这些函数(例如 createFn)的实现确实使用了 className 变量,尽管它没有作为参数传递给函数。

这是我的问题:为什么 classNamecreateFn 内的范围内? 在我看来,它已不在 forClass 中了 范围比 onSuccess 在创建范围内。

这和……有关系吗

  • 回调示例中的函数从未在创建函数上下文中被分配为变量,只是被调用?
  • 使用 Promise 的回调示例?

【问题讨论】:

  • 请发布可复制和可执行的代码。不是截图。
  • 还有一些模糊的。大概有一个与代码视频相关的链接。获取代码,将其精简为与您的问题相关的内容,然后发布。
  • 对我来说似乎是个错误(或者还有第二个 className 声明我们看不到它)。注意onSuccess create 的范围内,但callback 不在onSuccess 的范围内。不,这与承诺无关。
  • Raptor - 谢谢,好主意,现在问。贝尔吉和 T.J.克劳德——是的,这可以改善它,但我不是在问“我应该怎么做?”这将需要大量代码的答案。我在问“这里有什么原则?”这样我就可以阅读更多相关信息。

标签: javascript closures currying partial-application


【解决方案1】:

我向大家道歉。 Vimeo 录制可能有一些错误。

为了演示一个可行的解决方案,我创建了 Book CRUD 服务的一个工作版本来演示 JavaScript 中的部分应用程序......在 AngularJS 应用程序中使用。

getFn = function (objectId, callback) {

      // Simulate $http to get book information for
      // specified ID.

      var deferred = $q.defer(),
          book = {
            url : buildRequestURL(objectId),
            title : "Learn to use Javascript Partial Applications"                
            author: "Thomas Burleson"
          },
          notifyFn = onSuccess(callback);


      $timeout(function() {
        notifyFn( book );
        deferred.resolve( book );
      });

      return deferred.promise;
}

@见Full Source & Live CodePen Demo

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多