全局在什么(函数(全局){一些代码.(这个)做

What does the global in (function(global){ some code .. })(this) do?

本文关键字:全局 代码 这个 在什么 函数      更新时间:2023-09-26

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

它始于

(function(global){ ...

完全这对我来说很奇怪。 我发现 MDN 上的"global 是正则表达式实例的属性,而不是正则表达式对象",但我根本不明白它在这个脚本中是如何工作的。

此片段:

(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 的参数,用于此自执行函数内的所有代码。

自执行函数

用于定义单独的执行作用域,以便在此其他作用域内定义的任何函数或变量都不会干扰或直接从此作用域外部访问(将您的作用域与其他代码作用域隔离开来)。

在浏览器中,全局对象是window对象,但是如果您打算让代码可以在其他 JavaScript 环境(如服务器上的无节点.js中工作,其中全局对象可能不window,这是一种从默认this值中提取全局值的方法,将其放入另一个变量中,然后您可以在代码块中的任何位置引用该变量。

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

它只是一个函数参数名称。还不如froozboggles.

此代码:

(function(foo) {
    // In here, what's called "bar" in the outer scope is called "foo"
})(bar);
定义一个匿名函数,该函数

bar一个参数,并立即以 bar 的值作为第一个参数调用该函数。

除了 jfriend00 在他的精彩回答中提到的内容之外,这也是确保不会将变量和函数泄漏到外部作用域的好方法:如果你在 javascript 的顶部范围内声明var baz = 17;,它将是 window 的属性。如果像您提到的模式一样将其包装在函数中,则只能将属性显式导出到window - 在您的示例中,通过将它们分配给global编辑:正如@josh3736在他的评论中所说,您也可以通过分配而无需事先声明来泄漏给window,例如 quux = 4711; .