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に「return」が植え付けられるという奇妙な出来事が2つあります。それらは何をし、スクリプトの実行にどのように影響しますか?ありがとう!

4

1 に答える 1

2

スクリプトの実行には影響しません。1つ目returnは、DOMレディイベントハンドラーから$(".start")(jQueryclickメソッドがjQueryのインスタンスを返すため)戻ります。これは特定の時点で実行されるコールバックであるため、その戻り値では実際には何もできません。

2つ目は、プロパティを設定した後returnに戻りますが、コールバック(今回はクリックイベントハンドラー)から戻ってくるため、戻り値に対して何もできなくなります。"Done"localStorage

CoffeeScriptはreturn各関数の最後の式の値になると思います。そのため、これらのreturnステートメントが出力に表示されます。ドキュメントから:

return value関数は常に最終値を返しますが、完了したことがわかっている場合は、関数本体から明示的なreturn()を書き出すことで、早期に戻ることが可能であり、推奨されます。

于 2012-07-19T07:13:44.533 に答える