javascript - 脚本开头的 "(function() {"的用途(仅限 GreaseMonkey?)

标签 javascript function greasemonkey

我对 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/

相关文章:

algorithm - 在 VBScript 中将一个范围的值映射到另一个范围

bash - 为什么 bash 脚本中需要 "declare -f"和 "declare -a"?

JavaScript - Greasemonkey 的工作原理

javascript - 如何在循环中打开弹出窗口并相应地执行回调以返回状态? (Greasemonkey 脚本)

javascript - 访问 ul 列表中的元素

JavaScript - 将事件监听器添加到对象数组

javascript - 详细条件提交preventDefault

Javascript对象指的是它本身的值

javascript - CKEditor 中的 OnMouseOver 事件

javascript - 输入文本更改时提交表单