javascript - coffeescript 范围误解

标签 javascript coffeescript

我试图理解 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/

相关文章:

angularjs - 将 angular-seed jasmine 单元测试转换为 coffeescript

javascript - 如何使用 WebStorm IDE 在我的 Meteor 应用程序中调试 CoffeeScript

javascript - 使用 php + mysql 填充 morris.js

javascript - 可以在函数上调用函数吗?

javascript - 使用 jQuery 读取 CSV 文件

javascript - PEG.js 输入端出现问题

javascript - 我应该如何保持我的出版物的 react 性?

coffeescript - 使用不同的 andCallFake() 方法重用 Jasmine Spy

javascript - 无法在 CoffeeScript 中声明命名函数

coffeescript - 为什么 CoffeeScript 在 map 后需要空格?