6

以下 CoffeeScript 代码

foo = (x) ->
  alert("hello") unless x?
  alert("world") unless y?

编译为:

var foo;

foo = function(x) {
  if (x == null) {
    alert("hello");
  }
  if (typeof y === "undefined" || y === null) {
    return alert("world");
  }
};

为什么不检查isfoo的论点,而is?xundefinedy

4

1 回答 1

9

未定义检查是为了防止在检索不存在的标识符的值时引发的 ReferenceError 异常:

>a == 1
ReferenceError: a is not defined

编译器可以看到 x 标识符存在,因为它是函数参数。

编译器无法判断 y 标识符是否存在,因此需要检查 y 是否存在。

// y has never been declared or assigned to
>typeof(y) == "undefined"
true
于 2012-05-16T06:20:53.203 回答