我试图了解coffeescript中的变量范围并稍微混淆,这是一个例子:
CoffeeScript代码:
x = "localscope" z = () -> x = "functionscope" console.log(x) console.log(x)
Javascript编译结果:
(function() { var x,z; x = "localscope"; z = function() { x = "functionscope"; return console.log(x); }; console.log(x); }).call(this);
正如我所知,在纯javascript中,函数中包含的所有变量都在同一范围内.所以我理解用coffescript编写的所有变量都是全局变量?
解决方法
要在coffeescript中隐藏变量,您需要执行以下操作:
x = "localscope" z = ((x) -> () -> x = "functionscope" console.log(x) )(x) console.log(x)
产生的javascript是:
var x,z; x = "localscope"; z = (function(x) { return function() { x = "functionscope"; return console.log(x); }; })(x); console.log(x);
在您的示例中,x不是最内层函数的本地,而是指您在开始时声明的相同“全局”x.通过“全局”,我的意思是在同一个文件中随处可访问.