繁体   English   中英

无法读取CoffeeScript全局变量

[英]Can't read CoffeeScript global variable

我有两个coffeescript文件,第一个有以下几行:

jQuery(document).ready ($) ->
   dispatcher.bind "createuserchannel", (channelid) ->
     root = (exports ? this)
     root.channel_user = dispatcher.subscribe(channelid)

后者是:

jQuery(document).ready ($) ->
 root = (exports ? this)
 console.log root.channel_user

我不知道为什么,但是在Chrome控制台中,当我编写Object.keys(window)channel_user显示为全局变量,但是如果我尝试从Javascript访问它,则只会得到未定义

在jQuery事件的回调(例如第二种情况)中,jQuery this设置为触发事件的对象(在本例中为document )。 您看到两个选择:

首先,您可以显式使用window 目前尚不清楚这是否适合您的用例。

root = (exports ? window)

其次,您可以使用CoffeeScript粗箭头从外部范围保留this箭头。 请注意,如果您在该函数中的其他任何地方都依赖this行为,则会造成麻烦。

jQuery(document).ready ($) =>

我想在第二种情况下也会发生同样的情况,但是如果不确切知道dispatcher是什么,就不可能确定。

解决了:

dispatcher.bind是一个异步函数,因此在我从该函数访问变量时:

jQuery(document).ready ($) ->
 root = (exports ? this)
 console.log root.channel_user

channel_user仍未分配。 为了解决该问题,我添加了以下行:

jQuery(document).ready ($) ->
     dispatcher.bind "createuserchannel", () ->
      root = (exports ? this)
      console.log root.channel_user

这样,仅当设置了channel_user时,才会调用root.channel_user

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM