从`do`块调用函数

时间:2014-05-24 15:41:04

标签: coffeescript

为什么以下代码显示unique的错误?

do (unique = (-> ->), x = unique()) ->
  do (y = x) ->
    console.log "x is y:", x is y

输出

ReferenceError: unique is not defined

1 个答案:

答案 0 :(得分:1)

我已将您的代码简化为此(因为它是导致错误的原因)

do (unique = (-> ->), x = unique()) ->
    console.log "x is y:", x is y

编译版本为:

(function(unique, x) {
  return console.log("x is y:", x === y);
})((function() {
  return function() {};
}), unique());

也可以这样写:

a=function(unique,x) {
      return console.log("x is y:", x === y);
    }
b=(function() {
      return function() {};
    })
a(b,unique)

如您所见,范围内的任何位置都未定义最后一个唯一值。

这就是您收到此错误的原因。

我建议您提取 unique

unique = (-> ->)
do (unique, x = unique()) ->
  do (y = x) ->
    console.log "x is y:", x is y