Javascript 在自动执行匿名函数中使用未定义

Javascript 在自动执行匿名函数中使用未定义,javascript,coffeescript,global-variables,undefined,strict,Javascript,Coffeescript,Global Variables,Undefined,Strict,我正在尝试使用CoffeeScript中的自动执行匿名函数实现名称空间: 我还想保护“未定义”不被重新定义,因为这是文章建议的 因此,在CoffeeScript中,我可以做如下操作: ((skillet, $) -> skillet.fry -> alert('hi'); )( window.skillet = window.skillet || {}, jQuery); 并接近文章中描述的格式: (function(skillet, $) { return s

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

我还想保护“未定义”不被重新定义,因为这是文章建议的

因此,在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);
但是,当我尝试在…中添加未定义的时,由于严格模式,出现了编译错误:

“某些变量(如未定义的变量)不再可写”

我想知道是否有解决这个问题的办法?我想保持严格模式,因为使用它可能有一些好处,但我还没有完全意识到。但即使在谷歌上搜索关闭它的方法……我还是得到了零

谢谢你的关注

我还想保护“未定义”不被重新定义

由于严格模式出现编译错误:“某些变量(如未定义的变量)不再可写”

那你有什么问题?无需声明
未定义的
参数,因为CoffeeScript无论如何都不允许您使用此“变量”

如果您真的(需要/想要)担心某个第三方脚本为未定义的
赋值,请不要在代码中使用它。您可以始终使用
typeof
运算符或CoffeeScripts存在运算符

别担心。我认为除了明显的恶意攻击之外,没有人遇到过这样的错误

我还想保护“未定义”不被重新定义

由于严格模式出现编译错误:“某些变量(如未定义的变量)不再可写”

那你有什么问题?无需声明
未定义的
参数,因为CoffeeScript无论如何都不允许您使用此“变量”

如果您真的(需要/想要)担心某个第三方脚本为未定义的
赋值,请不要在代码中使用它。您可以始终使用
typeof
运算符或CoffeeScripts存在运算符


别担心。我认为,除了明确的恶意攻击之外,没有人遇到过这样的错误。

将CoffeeScript代码包装在自动执行的匿名文件中没有任何意义——默认情况下,编译器已经完成了这项工作

alert "Foo"
汇编成

(function() {
  alert("Foo");
}).call(this);
如果要确保例如
$
引用
jQuery
,只需添加一个局部变量:

$ = window.jQuery
skilett = window.skilett ? {}
# ... rest of the code ...
在使用严格模式时,尝试保护
未定义的
也没有意义,因为(正如错误消息所述)
未定义的
无论如何都是不可写的

在“常规”模式下,您可以在代码顶部生成一个值为
undefined
的变量,如下所示(只需使用此变量而不是“undefined”):


将CoffeeScript代码包装在自动执行的匿名文件中是没有意义的——默认情况下,编译器已经完成了这项工作

alert "Foo"
汇编成

(function() {
  alert("Foo");
}).call(this);
如果要确保例如
$
引用
jQuery
,只需添加一个局部变量:

$ = window.jQuery
skilett = window.skilett ? {}
# ... rest of the code ...
在使用严格模式时,尝试保护
未定义的
也没有意义,因为(正如错误消息所述)
未定义的
无论如何都是不可写的

在“常规”模式下,您可以在代码顶部生成一个值为
undefined
的变量,如下所示(只需使用此变量而不是“undefined”):


一般来说,我从来没有遇到过重新定义
未定义
的问题-任何这样做的代码都不足以使用,通过使用严格模式,您可以确保自己的代码也不会受到影响。我不会担心的!一般来说,我从来没有遇到过重新定义
未定义
的问题-任何这样做的代码都不足以使用,通过使用严格模式,您可以确保自己的代码也不会受到影响。我不会担心的!