[英]Using undefined in self-executing anonymous function
我正在尝试使用CoffeeScript中的自动执行匿名函数来实现命名空间:
http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/
我还想保护“未定义”以免被重新定义,因为这是本文的建议。
因此,在CoffeeScript中,我可以执行以下操作:
((skillet, $) ->
skillet.fry ->
alert('hi');
)( window.skillet = window.skillet || {}, jQuery);
并接近文章中描述的格式:
(function(skillet, $) {
return skillet.fry(function() {
return alert('hi');
});
})(window.skillet = window.skillet || {}, jQuery);
但是当我尝试在...中添加未定义时...由于严格模式而导致编译错误:
http://arcturo.github.com/library/coffeescript/07_the_bad_parts.html
“某些变量(例如未定义的变量)不再可写”
我想知道是否可以解决这个问题? 我想保持严格的模式,因为使用它可能会带来很多好处,而我并未完全意识到。 但是即使是谷歌搜索也可以关闭它...我想到了nil。
感谢您的光临!
将CoffeeScript代码包装为自动执行的匿名程序毫无意义-编译器默认已将其完成。
alert "Foo"
编译成
(function() {
alert("Foo");
}).call(this);
如果要确保例如$
引用jQuery
,只需添加一个局部变量:
$ = window.jQuery
skilett = window.skilett ? {}
# ... rest of the code ...
也有在试图保护没有意义的undefined
,同时使用严格模式,因为(作为错误消息状态) undefined
不可写,然后反正。
在“常规”模式下,您可以像这样在代码顶部生成一个值undefined
的变量(只需使用它代替“未定义”即可):
undef = ((u) -> u)()
我还想保护“未定义”以免被重新定义
和
由于严格模式而导致编译错误:“某些变量,例如undefined不再可写”
那你怎么了 无需声明undefined
参数,因为CoffeeScript仍然不允许您使用此“变量”!
如果您确实(需要/想要)担心某些第三方脚本将值分配给undefined
,请不要在代码中使用它。 您始终可以改用typeof
运算符或CoffeeScripts存在性运算符。
只是不用担心。 我认为除了明确的恶意攻击之外,没有人遇到过这样的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.