未传递的coffeescript默认参数未分配给与arg同名的外部变量

Nik*_* So 2 javascript coffeescript

任何人都可以解释为什么这不起作用?我只是在CoffeeScript页面的"立即尝试Coffeescript"的情况下运行它,我的Chrome控制台记录了"nope",如下所示

x = true
foo = (x = x) ->
  console.log if x then "works" else "nope"
foo() # "nope"
Run Code Online (Sandbox Code Playgroud)

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

太感谢了!

Arn*_*anc 10

看看如何编译函数会使问题变得明显:

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

如您所见,如果x参数为null,x则为其分配.所以它仍然是空的.

因此,重命名x变量以y修复问题:

y = true
foo = (x = y) ->
  console.log if x then "works" else "nope"
foo() # "nope"
Run Code Online (Sandbox Code Playgroud)