1

考虑以下 CoffeeScript:

$ ->
  if localStorage["Flag1"] isnt "Done"
    localStorage["Flag1"] = "Done" # Flagged on first page loading
  $(".start").click ->
    if localStorage["Flag2"] isnt "Done"
      localStorage["Flag2"] = "Done" # Flagged on first click interaction

编译成:

$(function() {
  if (localStorage["Flag1"] !== "Done") {
    localStorage["Flag1"] = "Done";
  }
  return $(".start").click(function() {
    if (localStorage["Flag2"] !== "Done") {
      return localStorage["Flag2"] = "Done";
    }
  });
});

有两个奇怪的“返回”被植入到渲染的 JavaScript 中。它们做了什么,它们将如何影响脚本的运行?谢谢!

4

1 回答 1

2

它们不会影响脚本的运行。第一个return将从 DOM 就绪事件处理程序返回$(".start")(因为 jQueryclick方法返回一个 jQuery 实例)。由于它是一个在某个时间点运行的回调,因此您实际上无法对该返回值做任何事情。

第二个return"Done"在设置localStorage属性后返回,但同样,由于它是从回调(这次是单击事件处理程序)返回,您将无法对返回的值执行任何操作。

我相信 CoffeeScript 会return计算每个函数中最后一个表达式的值,这就是为什么你会return在输出中看到这些语句的原因。从文档:

尽管函数总是会返回它们的最终值,return value但当你知道你已经完成时,从写出显式返回 ( ) 的函数体中提早返回是可能的,也是鼓励的。

于 2012-07-19T07:13:44.533 回答