[英]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.