为什么用JS中的匿名函数包装每个原型"类"对象?

Rir*_*iri 5 javascript

看看David Fowler的这个JS代码,他用一个匿名的自执行方法包装每一个"类",在那里他发送jQuery和window.我知道这是一种确保$和window实际上是你期望它们的全局jQuery和winndow变量的方法.

但这不是有点过度保护吗?你是否应该保护自己免受其他人更改$和window变量的影响 - 实际上是否有代码执行此操作,如果是这样,为什么?另外,包装这样的东西还有其他优点吗?

小智 5

如果我没记错的话,除了使用$的jQuery之外还有其他一些库.


jAn*_*ndy 3

使用函数上下文创建本地/函数作用域的概念都是为了保护您自己的代码。如果您希望 Javascript 代码在可能加载多个其他(甚至可能未知)脚本的环境中运行,那么这尤其有意义。

因此,如果其他一些 Javascript 代码在您自己的代码之前加载,并分配了window.$一些其他值(例如,它可能加载原型框架),那么如果您尝试访问 jQuery 特定的东西,您的代码就已经被搞砸了。

另一点是“”效应。有人创建了一条像

window.undefined = true;
Run Code Online (Sandbox Code Playgroud)

...
现在,您的所有检查undefined几乎都会失败。但通过显式创建这些变量/参数并用您期望的值填充它们,您可以避免所有这些问题。

(function(win, doc, $, undef) {
}(window, window.document, jQuery));
Run Code Online (Sandbox Code Playgroud)