3
回答
有关js全局变量污染的问题
滴滴云服务器,限时包月0.9元,为开发者而生>>>   
(function() {
    window.thin = {
        define: function(name, dependencies, factory) {
            //register a module
        }
    };
})();

上面的这一段代码,出处原文的作者是这么描述的:“我们把它挂在window上作为属性,然后再用一个function隔离出来,要不然,别人也定义一个同名的,就把我们覆盖掉了。

但是我无法理解function是怎么隔离这个全局变量的,因为我在上面那段代码后在写

window.thin=new Date();

然后访问window.thin时,window.thin已经被覆盖了。

举报
Zicl
发帖于3年前 3回/3K+阅
共有3个答案 最后回答: 3年前
作者的意思是,要是我定义一个define函数,别人也定义一个define函数,我的define函数就被覆盖了。而不是指暴露给你的thin属性。不要说这个,就是jquery,你也可以通过window.jQuery = null来覆盖。只暴露一个thin变量,会被覆盖的几率比较小,而不是没有。如果你恶意覆盖,那是谁也阻挡不了的。
--- 共有 1 条评论 ---
Zicl感觉是你说的这个意思 3年前 回复
最外面那个function 我们称之为闭包,作者所说的不污染全局变量意思是你在这个闭包内部声明任何变量都不用考虑会影响前面的变量。但是既然使用了window,那在这个闭包执行完成后thin就变成了一个全局变量,所以你之后的重新赋值时肯定会覆盖的,不知道我说的对不对
顶部