CoffeeScript模块的模式

CoffeeScript模块的模式,第1张

CoffeeScript模块的模式

Harmen的答案是相当不错的,但让我详细说明一下Coffeescript编译器在何处完成此 *** 作以及原因。

当您使用编译内容时

coffee -c foo.coffee
,总会得到
foo.js
如下所示的内容:

(function() {  ...}).call(this);

这是为什么?好吧,假设您输入了

x = 'stringy string'

在中

foo.coffee
。看到这种情况时,编译器会问:
x
该范围或外部范围中是否已经存在?如果不是,它将
varx
在Javascript输出中的该范围的顶部放置一个声明。

现在假设你写

x = 42

在中

bar.coffee
,同时进行编译和连接
foo.js
bar.js
进行部署。你会得到

(function() {  var x;  x = 'stringy string';  ...}).call(this);(function() {  var x;  x = 42;  ...}).call(this);

因此

x
in
foo.coffee
x
in
bar.coffee
完全相互隔离。这是Coffeescript的重要组成部分:
除非明确导出 (通过附加到共享的全局文件
exports
Node.js中), 否则变量从一个.coffee文件不会泄漏到另一个文件

您可以通过使用

-b
(“ bare”)标志来覆盖它
coffee
,但这仅应在非常特殊的情况下使用。如果您在上面的示例中使用了它,则输出将是

var x;x = 'stringy string';...var x;x = 42;...

这可能会带来可怕的后果。为了测试这个自己,尝试添加

setTimeout (-> alert x),1
foo.coffee
。请注意,您不必自己连接两个JS文件-
如果您使用两个单独的
<script>
标签将它们包含在页面中,它们仍然可以作为一个文件有效地运行。

通过隔离不同模块的作用域,Coffeescript编译器使您不必担心项目中的不同文件是否可能使用相同的局部变量名称。这是Javascript世界中的常见做法(例如,参见jQuery源或几乎所有jQuery插件),Coffeescript会为您处理。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4904671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存