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 item is '/'
        start += item
      else
        start += '/' + item
  start

当我启动 coffeescript repl 时,发生了一件非常奇怪的事情:

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

嗯? joinUrl 的导入以某种方式覆盖了变量 _ 的定义。尽管 (a) coffeescript 将上面粘贴的模块包装到一个函数中,因此变量 _ 的任何使用都不应该影响外部范围,并且 (b) 我在该代码中的任何一点都不会对 _ 进行任何赋值,除了 require 'underscore',这应该是完全相同的东西!

知道这里发生了什么吗?

最佳答案

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

中一样
> 5
5
> _ + 3
8

你的代码被翻译成类似的东西

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

关于javascript - 为什么 coffeescript 会覆盖我的下划线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22792809/

相关文章:

javascript - 为什么 JSLint 在 "Unexpected ' 之后提示 'return' else'?

Javascript 内部数组迭代

dom - 使用 coffeescript 删除一个 div 元素

javascript - Knockout.js 与 CoffeeScript、继承、对象实例化

javascript - 为什么在 javascript 中,一个自调用的匿名函数会包围 jQuery onReady 回调?

javascript - Ember.js 搜索模型动词

javascript - 观察 greasemonkey 脚本中的元素创建?

javascript - JVectorMap Multimap 向下钻取时有不同的样式,我怎样才能更改这种样式?

javascript - ROR - CoffeeScript 导致 "Uncaught ReferenceError"

node.js - Node-Webkit Facebook 集成