Tag: globals

什么是“泄漏”到全球范围?

不久之前,我提出了一个JavaScript设计模式(模块模式 – 见下文),我从John Resig的例子中得到了一个解决某人问题的一部分 ,我收到了以下评论: “……这种模式有点过于设计而不是那么好。 仍然渗透到全球范围。 而你不打开自己的异步装载机。 但它比ad-hoc编码更好!“ 所以… 如果“泄漏”到全局范围意味着“您的对象被附加到浏览器窗口(对象)”……那么所有内容都已经被追加(全局): 这“泄漏”到全球范围: window.jQuery …只需调用: window.jQuery并将其解析为函数(); 这“泄漏”到全球范围: function HelloWorld() { alert(‘Howdy’); } …只需致电: window.HelloWorld() ,你就会得到’你好’。 这“泄漏”到全球范围: var myVariable = 10; …只需致电: window.myVariable ,你就会得到10分 如果评论者是正确的,那么以上所有“泄漏”到全球范围。 所以,就个人而言,我没有看到一种不“泄漏”到全局范围内的方法,因为即使你的表单控件也存在(也是如此)。 因此,这是我的问题…… 什么是“泄漏”到全球范围? 为什么那么糟糕? 你怎么避免它? 当想要创建持久的自定义对象时,为什么模块模式(下面)不好? 设计模式让你封装复杂的逻辑, 封装突然变坏只是因为我们用JavaScript编写 ? 或者……这个评论者完全错了吗? 这是我上面提到的模块模式: var myNamespace = (function($) { var publicInstances = {}; // *********************** […]