将全局变量导入CoffeeScript范围

时间:2015-01-23 22:49:26

标签: coffeescript

我有以下简单的咖啡文件:

'use strict'

$("#subForm").submit()

这将创建JavaScript文件:

(function() {
  'use strict';
  $("#subForm").submit();
}).call(this);

我真正需要的是相当于:

(function($) {
  'use strict';
  $("#subForm").submit();
})($);

我该怎么做?我甚至需要这样做吗?

这适用于Chrome扩展程序。

1 个答案:

答案 0 :(得分:0)

由于CoffeeScript被编译成IIFE(因此屏蔽了全局范围),您需要做的就是在脚本开头使用常规变量赋值作为全局导入的替代方法:

'use strict'
$ = jQuery

$("#subForm").submit()

这编译为:

(function() {
  'use strict';
  var $;

  $ = jQuery;

  $("#subForm").submit();

}).call(this);

如我所见,将全局变量作为参数传递给封闭的IIFE并不会真正提供任何额外的好处。

上述工作原因是$jQuery是不同的标识符,但如果您希望全局导入不涉及不同的名称,则可以使用@来引用全局对象并以这种方式进行“进口”:

'use strict'
$ = jQuery
window = @
document = @document

$("#subForm").submit()