转载自***:https://bonsaiden.github.io/JavaScript-Garden/zh/#function.scopes

只有一个全局作用域导致的常见错误是命名冲突。在 JavaScript中,这可以通过 匿名包装器 轻松解决。

(function() {    // 函数创建一个命名空间    window.foo = function() {        // 对外公开的函数,创建了闭包    };})(); // 立即执行此匿名函数

匿名函数被认为是 ;因此为了可调用性,它们首先会被执行。

( // 小括号内的函数首先被执行function() {}) // 并且返回函数对象() // 调用上面的执行结果,也就是函数对象

有一些其他的调用函数表达式的方法,比如下面的两种方式语法不同,但是效果一模一样。

// 另外两种方式+function(){}();(function(){}());

结论

推荐使用匿名包装器也就是自执行的匿名函数)来创建命名空间。这样不仅可以防止命名冲突, 而且有利于程序的模块化。

另外,使用全局变量被认为是不好的习惯。这样的代码容易产生错误并且维护成本较高。