Javascript 为什么coffeescript会覆盖我的下划线?

Javascript 为什么coffeescript会覆盖我的下划线?,javascript,coffeescript,Javascript,Coffeescript,我编写了以下代码,旨在将字符串连接到url中 _ = require 'underscore' exports.joinUrl = (start, rest...) -> for item in rest if _.last start is '/' if _.first item is '/' start += item[1..] else start += item else if _.first

我编写了以下代码,旨在将字符串连接到url中

_ = require 'underscore'

exports.joinUrl = (start, rest...) ->
  for item in rest
    if _.last start is '/'
      if _.first item is '/'
        start += item[1..]
      else
        start += item
    else
      if _.first item is '/'
        start += item
      else
        start += '/' + item
  start
当我启动coffeescript repl时,发生了一件非常奇怪的事情:

> _ = require 'underscore'
[snipped]
> {joinUrl} = require './joinurl'
{ joinUrl: [Function] }
> _
{ joinUrl: [Function] }
嗯?不知何故,joinUrl的导入正在覆盖变量389;的定义。即使coffeescript将上面粘贴的模块封装到一个函数中,这样变量u的任何使用都不会影响外部作用域,并且在代码中的任何点上,我都不会对u进行任何赋值,除非需要“下划线”,这应该是完全相同的


知道这里发生了什么吗?

就像在Python中一样,REPL使每个表达式结果都可以作为ux使用,就像在

您的代码被翻译成

> _ = (_ = require 'underscore')
[snipped]
> _ = ({joinUrl} = require './joinurl')
{ joinUrl: [Function] }
> _ = (_)
{ joinUrl: [Function] }

与Python中一样,REPL使每个表达式结果都可以作为ux使用,如

您的代码被翻译成

> _ = (_ = require 'underscore')
[snipped]
> _ = ({joinUrl} = require './joinurl')
{ joinUrl: [Function] }
> _ = (_)
{ joinUrl: [Function] }

这记录在[repl.cofee docs]中。它说每个输入都被分配给uu,以强制它成为一个表达式。哎呀,好吧,这回答了我的问题。太糟糕了,它不能很好地处理使用下划线.js的代码。@limp_chimp:说清楚一点,这是REPL的一个特性,而不是CoffeeScript本身。这只是意味着在REPL中,需要为下划线使用不同的名称。您仍然可以在所有代码中使用u。这在[repl.cofee docs]中有记录。它说每个输入都被分配给uu,以强制它成为一个表达式。哎呀,好吧,这回答了我的问题。太糟糕了,它不能很好地处理使用下划线.js的代码。@limp_chimp:说清楚一点,这是REPL的一个特性,而不是CoffeeScript本身。这只是意味着在REPL中,需要为下划线使用不同的名称。您仍然可以在所有代码中使用。