我正在尝试使用CoffeeScript重新创建这个流行的jQuery lambda闭包:
(function($, window, undefined){
$(document).ready(function(){
...
});
})(jQuery, window);
到目前为止,我有这个:
(($, window, undefined) ->
$ ->
alert "js!"
)(jQuery, window)
我收到了这个错误:
错误:第1行的解析错误:意外的'BOOL'
看起来undefined
是问题的原因。关于如何解决这个问题的任何想法?
答案 0 :(得分:54)
undefined
是CoffeeScript中的关键字。您不需要确保它被正确定义,因此您可以忘记该部分。
CoffeeScript提供了一个do
关键字,可用于创建闭包,而不是使用立即调用的函数表达式语法。
do ($ = jQuery, window) ->
$ ->
alert "js!"
编译的JavaScript
(function($, window) {
return $(function() {
return console.log("js!");
});
})(jQuery, window);
在CoffeeScript 1.3.1之前,不支持上述语法。对于旧版本,您仍需要执行此操作:
CoffeeScript来源 [try it](($, window) ->
$ ->
alert "js!"
)(jQuery, window)
如果你很好奇,这就是CoffeeScript处理undefined
的方式。
console.log undefined
编译的JavaScript
console.log(void 0);
您可以看到它不使用undefined
变量,而是使用JavaScript's void
operator来生成未定义的值。
答案 1 :(得分:13)
do ($, window) ->
$ ->
alert "js!"
编译到
(function($, window) {
return $(function() {
return alert("js!");
});
})($, window);