我试图理解 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
。我所说的“全局”是指在同一文件中的任何地方都可以访问。
关于javascript - coffeescript 范围误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806010/