coffeescript编译成js之后在前端用js调用其函数的问题
比如我在coffeescript里写一个函数:
abc=->
1+1
编译成js后是:
(function() {
var abc;
abc = function() {
return 1 + 1;
};
}).call(this);
然后我在html里引用编译后的js:
<script src="js/js.js"></script>
<script type="text/javascript">
alert(abc());
</script>
但是并不能找到abc这个函数
把(function() {...}.call(this)外面包的这层去掉之后才可以。
应该是把abc变成了局部的函数了……
那我应该怎么办?总不能每次编译之后再手动把包裹的.call(this)去掉吧?
ps:它默认的编译方式,这样包裹起来有什么好处?还是说只是适用于nodejs的时候有好处?
node.js web前端开发 JavaScript coffeescript 语法糖
领域爱好者
10 years, 2 months ago
Answers
这种默认的解析方式本质上并不是为了适应nodejs 的模块化方式,相对的,我反而觉得是为了浏览器端。
楼主想要的那种效果:
事实上是我们在写代码的时候不推荐的书写方式,
这样会将自己代码中定义的所有变量暴露到顶级作用域,
相当于定义了一个
window.abc = function(){};
coffeeScript在很大程度上就是通过更严谨的语法避免这种危险的做法(多人协作开发非常容易造成冲突)。
如果你确实想要赋值window对象属性,也可以很明确到告诉它:
@abc=->
1+1
或者
this.abc=->
1+1
全局的abc方法自然就可以被访问到了。
青铜直升机
answered 10 years, 2 months ago