繁体   English   中英

在自执行匿名函数中使用undefined

[英]Using undefined in self-executing anonymous function

我正在尝试使用CoffeeScript中的自动执行匿名函数来实现命名空间:

如何在JavaScript中声明名称空间?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM