• 内存泄漏


    1.全局变量引起的内存泄露

    function foo() {
    	name = 123;  // name成为一个全局变量,不会被回收
        // 相当于 window.name = 123;
    }

    function bar() {
    	this.age = 34; // 相当于window.age = 34;
    }
    bar();

    2.闭包引起的内存泄露
    var foo = (function() {
    	var age= 25; // 被闭包引用,不会被回收
        return function() {
        	console.log(score);
        }
    })();

    3.DOM被删除或者被清空时,时间未清除导致的内存泄漏
    $('#foo').on('click', function() {
    	console.log(1);
    }).remove();
    
    // 解决方法
    $('#foo').on('click', function() {
    	console.log(1);
    }).off('click').remove();
    
    // 原始解法
    var foo = document.getElementById('foo');
    foo.onclick = function() {
    	console.log(1);
        foo.onclick = null;
    }
    
    // 采用事件委托
    document.onclick = function(event) {
    	event = event || window.event;
        if(event.target.id == 'foo') {
        	console.log(1);
        }
    }

    4.被遗忘的计时器或者回调函数
    var someResource = getData();
    setInterval(function() {
        var node = document.getElementById('Node');
        if(node) {
            // Do stuff with node and someResource.
            node.innerHTML = JSON.stringify(someResource));
        }
    }, 1000);
    计时器使得节点或数据的引用不再被需要了。如果间隔处理不能被回收,它的依赖也不能被回收。那意味着可能存储着大量数据的someResource,也不能被回收。

     
     
  • 相关阅读:
    关于Linux 上建立生成/添加SSH公钥
    sql随机插入数据--记录
    centos 安装搜狗
    centos yum命令找不到包
    命令行改为图形界面
    CentOS7l联网
    .net mvc 框架实现后台管理系统 3
    .net mvc 框架实现后台管理系统 2
    .net mvc 框架实现后台管理系统
    爬取猫眼数据
  • 原文地址:https://www.cnblogs.com/jeremy-o/p/9469716.html
Copyright © 2020-2023  润新知