栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

CoffeeScript模块的模式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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会为您处理。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号