谁能解释为什么这行不通?我只是从CoffeeScript页面的“立即尝试Coffeescript”开始运行,而我的Chrome控制台记录了“nope”,如下所示

x = true
foo = (x = x) ->
  console.log if x then "works" else "nope"
foo() # "nope"

如果我在参数定义中将x = true更改为y = true并将(x = x)更改为(x = y)

太感谢了!

最佳答案

查看函数的编译方式使问题显而易见:

  foo = function(x) {
    if (x == null) x = x;
    return console.log(x ? "works" : "nope");
  };

如您所见,如果x参数为null,则会为其分配x。因此它仍然为空。

因此,将x变量重命名为y可解决此问题:
y = true
foo = (x = y) ->
  console.log if x then "works" else "nope"
foo() # "nope"

关于javascript - coffeescript默认参数在未传递时未分配给与arg同名的外部变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7126912/

10-12 13:06