1

到目前为止,我一直在使用自执行匿名函数以避免出现变量命名问题:

(function () {
    var a, b, c;
    a = 5;
    b = 10;
    c = 15;
    console.log('No problema!');
]());

我也知道使用 onload 函数也是一种替代方法:

window.onload = function () {
    var a;
    a = 25;
    console.log('Yay!!!');
}

但我真的不喜欢我的代码完全被困在一个函数中 - 有没有一种方法可以让我使用 JavaScript 对象来帮助我避免使用自执行函数?

4

2 回答 2

2

在当今的大多数浏览器中,函数只是封装单元。如果要为变量创建作用域,请将其设置为函数的局部变量。

但是今天有许多服务器端 JavaScript 安装,存在模块,许多基于require.js。如果您使用 Nodejs 编写应用程序,您将已经熟悉它。

不过,下一版本的 JavaScript 即将推出。命名为 ES6、ES.next、Harmony 或 JavaScript.next,这个新的 JavaScript 将包含用于隐藏信息的模块以及块作用域。许多浏览器现在开始实现该语言的功能。您可以在http://repl.it等地方进行试验。您可以使用 Google 的Traceur 编译器将包含许多 ES6 提案的语言编译成当今的 JavaScript。

TL;DR:现在:坚持浏览器中的功能。或者将 require.js 用于您的服务器端应用程序。坚持下去,因为 ES6 即将到来。

于 2012-07-20T03:01:01.747 回答
1
var MyObject = (function() {
    var _variableHidden = 1;

    return {
        variableVisible: 2
    };
})();

MyObject.variableVisible //= 2
MyObject._variableHidden //= undefined

这被称为“Reavealing Module Pattern”。它允许您使用作用域来隐藏变量,同时仍然通过将属性和方法附加到返回的对象来使它们可用。您可以在此处阅读有关此模式和其他模式的更多信息:http: //addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript

虽然这种方法不会删除“自动执行”功能,但它确实允许您在保持范围和变量隐藏的好处的同时使事物对外部范围可用。

我还应该注意,它们不是自动执行的函数。他们不执行自己。我们实际上是为他们这样做的:)。只是我的小毛病,哈哈。

于 2012-07-20T03:01:18.017 回答