美文网首页
闭包问题

闭包问题

作者: QinRenMin | 来源:发表于2018-09-05 17:22 被阅读0次
  • 什么是闭包?
    定义:函数嵌套函数,内部函数可以引用外部函数的参数和变量,并且参数和变量不会被垃圾回收机制收回
    如下面函数:
function aa() {
    let a = 1;
    return function () {
        a++;
        console.log(a);
    }
}
let b =aa();
b(); //2
b();//3
  • 闭包的好处
    1)将变量长期存储在内存中
    2)避免全局变量的污染
    3)可以存在私有成员
    用法
    1.模块化代码
let aaa = (function () {
    let a = 1;
    return function () {
        a++;
        console.log(a);
    }
})();
aaa();
aaa();
let aaa = (function () {
    //私有成员
    let a = 1;
  function bbb() {
        a++;
        console.log(a);
    }
    function ccc(){
      a++;
      console.log(a);
    }
    return{
        a:a,
        b:bbb,
        c:ccc
    }
})();

console.log(aaa.a); //1
aaa.b();//2
aaa.c();//3
console.log(aaa.a); //1

2.在循环中直接找到对应元素的索引

let ali = document.getElementsByTagName('li');
for( var i = 0 ; i < ali.length; i++)
    {
        (function (a) {
            ali[i].onclick = function () {
                alert(a);
            }
        })(i);
    }
   let ali = document.getElementsByTagName('li');
    for(var i = 0; i<ali.length; i++){
        ali[i].onclick = (function (a) {
            return function () {
                alert(a);
            }
        })(i)
    }

使用let 解决(let支持块级作用域)

    let ali = document.getElementsByTagName('li');
    for(let i = 0; i<ali.length; i++){
        ali[i].onclick = function () {
            alert(i);
        }
    }
  • 解决闭包引起的内存泄露问题(IE)
    如果闭包作用域中存在一个html元素,那么就意味着该元素将无法销毁
var div  =document.getElementById('div');
    div.onclick = function () {
        alert(div.id);
    };

上面就会造成在IE下的内存泄露问题
解决方式

window.onunload = function () {
        div.onclick = null;
    }
var id = div.id;
div = null;

相关文章

  • JS闭包问题(二)

    在之前的JS闭包问题(一)文章中大概介绍了一下JS闭包,同时讲了闭包与变量之间的问题,今天我们继续聊闭包,聊聊闭包...

  • for循环与setTimeout、事件绑定

    闭包 闭包 = 函数 + 创建该函数的环境 问题 这些问题出现的原因,闭包不是主因,是由于setTimeout和事...

  • 闭包问题

    什么是闭包?定义:函数嵌套函数,内部函数可以引用外部函数的参数和变量,并且参数和变量不会被垃圾回收机制收回如下面函...

  • 闭包,定时器

    问题 1.什么是闭包? 有什么作用 闭包(英语:Closure),又称词法闭包(Lexical Closure)或...

  • python之闭包

    1、什么是闭包? 2、闭包有什么用? 3、闭包的应用场景? 今天带着以上三个问题来学习闭包。 首先说明:闭包,并不...

  • javascript复习笔记(2)

    闭包 网上讲闭包的文章一搜一大把。而且面试时,比较传统的问题都有很大几率提到闭包的问题。的确,闭包是js中一个很重...

  • 闭包原理及应用

    这个问题的经典性,几乎所有面试官都会问到这个问题,什么情况下会发生闭包,为什么需要闭包,什么场景下需要,闭包闭了谁...

  • Python中的闭包

    什么是闭包?闭包有什么用?为什么要用闭包?今天我们就带着这3个问题来一步一步认识闭包。 闭包和函数紧密联系在一起,...

  • Python中的闭包

    什么是闭包?闭包有什么用?为什么要用闭包?今天我们就带着这3个问题来一步一步认识闭包。 闭包和函数紧密联系在一起,...

  • 闭包的总结

    围绕:闭包是什么?闭包的用途有哪些?闭包的缺点是什么? 这三个问题来进行总结 一、何为闭包?如果一个函数用到了外部...

网友评论

      本文标题:闭包问题

      本文链接:https://www.haomeiwen.com/subject/gqehiftx.html