将全局变量导入 CoffeeScript 作用域
Importing global variables into CoffeeScript scope
我有以下简单的 Coffee 文件:
'use strict'
$("#subForm").submit()
这将创建 JavaScript 文件:
(function() {
'use strict';
$("#subForm").submit();
}).call(this);
我实际需要的相当于:
(function($) {
'use strict';
$("#subForm").submit();
})($);
我该怎么做?我什至需要这样做吗?
这是 Chrome 扩展。
由于 CoffeeScript 被编译成一个 IIFE(因此不受全局范围的影响),您需要做的就是在脚本的开头使用常规变量赋值作为全局导入的替代方法:
'use strict'
$ = jQuery
$("#subForm").submit()
编译为:
(function() {
'use strict';
var $;
$ = jQuery;
$("#subForm").submit();
}).call(this);
据我所知,将全局变量作为参数传递给封闭的 IIFE 并不会真正提供任何额外的好处。
上面的工作是因为 $
和 jQuery
是不同的标识符,但是如果你想要不涉及不同名称的全局导入,你可以使用 @
来引用全局对象并以这种方式执行 "imports":
'use strict'
$ = jQuery
window = @
document = @document
$("#subForm").submit()
我有以下简单的 Coffee 文件:
'use strict'
$("#subForm").submit()
这将创建 JavaScript 文件:
(function() {
'use strict';
$("#subForm").submit();
}).call(this);
我实际需要的相当于:
(function($) {
'use strict';
$("#subForm").submit();
})($);
我该怎么做?我什至需要这样做吗?
这是 Chrome 扩展。
由于 CoffeeScript 被编译成一个 IIFE(因此不受全局范围的影响),您需要做的就是在脚本的开头使用常规变量赋值作为全局导入的替代方法:
'use strict'
$ = jQuery
$("#subForm").submit()
编译为:
(function() {
'use strict';
var $;
$ = jQuery;
$("#subForm").submit();
}).call(this);
据我所知,将全局变量作为参数传递给封闭的 IIFE 并不会真正提供任何额外的好处。
上面的工作是因为 $
和 jQuery
是不同的标识符,但是如果你想要不涉及不同名称的全局导入,你可以使用 @
来引用全局对象并以这种方式执行 "imports":
'use strict'
$ = jQuery
window = @
document = @document
$("#subForm").submit()