从控制台调用coffeescript函数

Lee*_*lla 16 javascript coffeescript ruby-on-rails-3.1

用coffeescript和Rails 3.1.0.rc4玩一点.有这个代码:

yourMom = (location) ->
  console.log location

yourMom "wuz hur"
Run Code Online (Sandbox Code Playgroud)

页面加载时,会正确输出"wuz hur".但是当我试着打电话的时候

yourMom("wuz hur")
Run Code Online (Sandbox Code Playgroud)

从chrome js控制台(我有时会测试普通的JS函数),我得到一个"ReferenceError:yourMom未定义"

coffeescript生成的函数是否以这种方式提供?

小智 37

共享全局方法/变量的更简单方法是使用@表示这意味着.

@yourMom = (location) ->
  console.log location

yourMom "wuz hur"
Run Code Online (Sandbox Code Playgroud)

更好的语法和更容易阅读,但我不鼓励您创建全局方法/变量


Jam*_*ong 13

发生这种情况是因为coffeescript将所有内容包装在一个闭包中.该代码的JavaScript输出实际上是:

(function() {
  var yourMom;
  yourMom = function(location) {
    return console.log(location);
  };
  yourMom("wuz hur");
}).call(this);
Run Code Online (Sandbox Code Playgroud)

如果要将其导出到全局范围,可以执行以下操作:

window.yourMom = yourMom = (location) ->
  console.log location
Run Code Online (Sandbox Code Playgroud)

要么

this.yourMom = yourMom = (location) ->
  console.log location
Run Code Online (Sandbox Code Playgroud)

  • 它是 - 但你应该特别试图避免在JavaScript中发布许多全局变量.当你想要调试它们时,将它们放入全局范围,然后在完成它们之后将它们从全局范围中删除. (2认同)