全局(函数(全局){某些代码..})(this)有什么作用?

时间:2012-04-25 22:17:36

标签: javascript

我正在考虑向JSON添加注释,并发现this script在处理JSON有效之前将其删除。我只是想了解如何使JSON.minify()函数可用?

开头
(function(global){ ...

对我来说完全是奇怪的。我在MDN上发现“global is a property of a RegExp instance, not the RegExp object”,但我不明白它在这个脚本中是如何工作的。

2 个答案:

答案 0 :(得分:2)

此片段:

(function(global){
   // your code here
   // referring to the variable named "global" in this scope 
   // will be a reference to the default javascript global object
})(this);

是一个构造,用于将全局对象(无论它可能是什么)分配给标记为global的参数,以用于此自执行函数内的所有代码。

自执行函数用于定义单独的执行范围,以便您在此范围内定义的任何函数或变量不会干扰或直接从此范围访问(将范围与其他代码范围隔离)。 / p>

在浏览器中,全局对象是window对象,但如果您打算使用可能在其他javascript环境中运行的代码(例如服务器上没有node.js),那么全局对象可能不在window,这是一种从默认this值中提取全局值的方法,将其放入另一个变量中,然后可以引用代码块中的任何位置。

对于仅在浏览器中运行的代码意味着,确实没有意义。您可以在需要全局对象时引用window

答案 1 :(得分:2)

它只是一个函数参数名称。它也可能是froozboggles

此代码:

(function(foo) {
    // In here, what's called "bar" in the outer scope is called "foo"
})(bar);

定义一个带有一个参数bar的匿名函数,并立即使用值bar作为第一个参数调用它。

除了jfriend00在他的回答中提到的内容之外,它还是一种确保不会将变量和函数泄漏到外部范围的好方法:如果您在顶部范围内声明var baz = 17;在javascript中,它将是window的属性。如果您将其包装在函数中,就像您提到的模式一样,您只能将属性显式导出到window - 在示例的情况下,将属性分配给global编辑:正如@ josh3736在评论中所说的那样,你也可以通过在没有事先声明的情况下进行分配来泄露到window,例如quux = 4711;