我对 JavaScript 还很陌生,我正在自学。我目前正在创建和调整 GreaseMonkey 脚本。我注意到大多数简单的脚本(即那些不需要命名函数的脚本)直接进入主代码,但有些脚本是这样设置的:
(function() {
//main code here
})();
这种编码的意义是什么?我已经注释掉了顶部和底部,并且脚本仍然运行完全相同。
它只是一个编码标准,还是真的有功能?而且,正如我的标题所问的,这是 GreaseMonkey 特有的事情,还是我应该一直做的事情?
最佳答案
此技术有效地创建了一个私有(private)命名空间,只能由该脚本访问。例如,这段代码:
(function() {
var a = 5;
})();
对全局命名空间没有影响(a
变量被闭包捕获,因此window.a
不会受到影响)。这是一种非常好的方法,可以通过使许多脚本根本不是全局变量来防止它们相互干扰。我在编写任何 JavaScript 时都使用这种技术,而不仅仅是 Greasemonkey 脚本,并且强烈推荐将其作为编写库时的最佳实践。
如果您想将某些函数公开给其他 JavaScript 代码,而不是完全隔离您的脚本,您可以执行以下操作:
var MyNamespace = (function () {
var that = {};
that.square = function(x) {
return x*x;
};
return that;
})();
然后您可以从另一个脚本执行 MyNamespace.square(5)
,这将返回 25。
关于javascript - 脚本开头的 "(function() {"的用途(仅限 GreaseMonkey?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4481868/