全局在什么(函数(全局){一些代码.(这个)做
What does the global in (function(global){ some code .. })(this) do?
我正在考虑向 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;
.
- 改进js代码以删除全局变量和函数
- 在单独的上下文中运行 js 代码并访问其全局变量
- 为什么Javascript代码打印'未定义'即使变量被声明为全局变量
- 未访问全局变量,未运行代码
- 使用 ajaxError 全局处理程序显示 HTTP 状态代码 401 详细信息
- 为什么全局变量无法访问,即使稍后在代码中定义了局部变量
- 全局在什么(函数(全局){一些代码.(这个)做
- 如何将代码包装到模块中以避免使用全局变量
- 为什么Disqus不使用全局CDN作为其注释代码
- 如何在 html 页面中为所有 ajax 错误提供全局代码
- 正在将节点代码库迁移到TypeScript:全局范围
- 为什么在代码示例中' this '不是指向js全局作用域
- 在以下代码中替代全局变量
- 通过Javascript从后台代码访问全局静态变量
- 我如何使这个正则表达式代码全局
- 如果requireJS模块在$上设置了全局变量,我如何仅在全局变量被分配时执行模块代码
- 所以我使用一个全局变量,为什么这段代码返回一个'undefined'的警告
- 我无法在以下代码中设置全局变量.我做错了什么?
- 全局变量的WebStorm代码帮助
- Node.js package.json 脚本代码使用本地或全局库