9159金沙游艺场-奥门金沙游艺场-[欢迎您]

9159金沙游艺场为您呈现最新的面貌!,目前注册送体验金,欢迎您将成为影视娱乐行业新的风向标,是亚洲的优质娱乐先锋。

如何检测

日期:2020-01-04编辑作者:前端

如何检测 JavaScript 中的自定义全局变量

译者注: 全局变量的滥用是一种很糟糕的程序设计。很容易造成依赖和状态混乱。 而在 Java 和 JavaScript 这种自动垃圾回收的语言里面,全局(可见的)变量一直是内存泄露的隐藏杀手。

本文提供了一种靠谱的检测全局变量实现方式.

在 JavaScript中随意设置全局变量并不是个好习惯。原文作者参与了 MooTools 项目, 据他所说, 已经有十年时间天天听到与此相关的谈论。 MooTools 扩展了浏览器的原生JS对象, 但也使用了一些全局变量, 如 Browser$$。我觉得 “全局变量太恐怖了!(原文 global vars are terrible)” , 有点无奈的是, jQuery 和 JavaScript loaders 都用了至少一个全局变量。

除了故意的全局变量, 否则将一个对象泄漏到全局空间其实是很糟糕的习惯, 一般就是烂代码才会这样做。那么怎么检测有哪些全局变量是我们自己放进去的呢? 明白了原理代码就很简单:

// 创建一个新的  iframe, 然后将其 `contentWindow` 中的属性值
// 与当前 window 中的属性值对比, 不在其中的就是自定义对象
(function() {
    var iframe = document.createElement('iframe');
    iframe.onload = function() {
        // 使用 Object.keys() 获取对象的所有属性名 
        var iframeKeys = Object.keys(iframe.contentWindow);
        Object.keys(window).forEach(function(key) {
            // 如果存在 window 中,而 iframe 中却没有
            if(!(key in iframeKeys)) {
                // 输出到控制台,也可以加入数组,自己处理
                console && console.log && console.log(key);
            }
        });
    };
    // 必须在 设置 src 属性之前添加 onload 事件。
    // 在 onload 里面 contentWindow 才变得可用! 
    iframe.src = 'about:blank';
    document.body.appendChild(iframe);
})();

当然,因为是2个 window 对象,也是 2个不同的 document, 所以你会看到 window, document, top, 和 location 都被输出了。但其他的都是被 JavaScript 代码有意或无意地泄露到全局空间。

 

JavaScript 中的自定义全局变量 译者注: 全局变量的滥用是一种很糟糕的程序设计。很容易造成依赖和状态混乱。 而在 Java 和 Java...

本文由9159金沙游艺场-奥门金沙游艺场-[欢迎您]发布于前端,转载请注明出处:如何检测

关键词:

Linux下Qt开拓条件的搭建

Linux下Qt开发环境的搭建 之前一直使用Ubuntu软件中心中的Qt4开发Qt的应用程序,现在转到Linux下来做Qt5开发,但是必须...

详细>>

python实例深入分析【9159金沙游艺场】

Python编程中的反模式实例分析,python实例分析 本文实例讲述了Python编程中的反模式。分享给大家供大家参考。具体分...

详细>>

Python的OO思想,PythonOO思想

Python的OO思想,PythonOO思想 想当年大二的时候,在学校学习Java, 最牛逼的OO思想,用了3页纸就讲完了,还是清华大学...

详细>>

python遍历数组的两种方法

python遍历数组的两种方法 第一种,最常用的,通过for in遍历数组 colours = ["red","green","blue"]for colour in colours: print colo...

详细>>