【问题标题】:Assigning functions to vars in CoffeeScript / JS在 CoffeeScript / JS 中为变量分配函数
【发布时间】:2020-11-17 09:09:22
【问题描述】:

以下 CoffeeScript:

greet = -> "This is an example of a function"

编译时生成以下 JavaScript 代码:

(function() {
  var greet;
  
  greet = function() {
    return "This is an example of a function";
  };

}).call(this);

我的问题是,为什么 JavaScript 不能像这样创建一个函数:

(var greet = function() {
    return "This is an example of a function"
};

}).call(this);

【问题讨论】:

    标签: javascript function coffeescript var


    【解决方案1】:

    这是因为 CoffeeScript 如何实现 lexical scoping。首先,默认情况下,CoffeeScript 转译器会将输出的 JavaScript 包装在一个匿名函数中,以使其远离全局命名空间(尽管可以禁用此行为)。这就是外层函数的原因(如果你要写更多的 CoffeeScript 代码,那么它最终会在 JS 中的一个匿名函数中结束)。

    其次,CoffeeScript 转译器会自动声明在作用域顶部使用的所有变量(同样,如果您在 CoffeeScript 中使用更多顶级变量,那么它们将在顶部声明为 greet;如果您使用任何仅在内部函数内部的变量,那么它们也将在那里声明,而不是在更大范围的外部)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多