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