Top-level variables aren't globally-scoped and return values are mandatory in CoffeeScript

前端 未结 3 617
粉色の甜心
粉色の甜心 2021-01-21 04:19
funName = () ->
  $(\".foo\").addClass(\"bar\");

Compiles into the scope of an anonymous function. Calling funName from the console res

3条回答
  •  清歌不尽
    2021-01-21 05:22

    Mike has answered the main question here. The modular wrapper a common point of confusion for CoffeeScript newcomers, as illustrated by these related questions:

    • How do I define global variables in CoffeeScript?
    • Why use the javascript function wrapper (added in coffeescript) ".call(this)"
    • Getting rid of CoffeeScript's closure wrapper

    As to your other question: If you don't want a function to return anything, simply make the last line of that function either return by itself or, equivalently, undefined. Either will compile to a function with no return. For instance:

    funName = ->
      $(".foo").addClass "bar"
      return
    

    compiles to

    var funName;
    funName = function() {
      $(".foo").addClass("bar");
    };
    

    Note that there is an ongoing discussion (issue 899) about a possible alternative syntax for defining no-return functions. If the current proposal were accepted, you'd be able to write your function as

    funName = -/> $(".foo").addClass "bar"
    

    If you like that syntax, you should voice your support for it.

提交回复
热议问题