JavaScript 闭包

    技术2026-03-27  11

    垃圾回收机制

    全局变量只有标签页关闭才会回收局部变量用完就回收

    标准浏览器使用的是标记回收,旧的IE使用的是引用回收,如果两个变量相互引用,这两个变量就一直不会被回收

    闭包

    var a = 10; document.onclick = function(){ console.log( ++a ); } /*a是全局变量,所以函数里的a可以一直加*/ //闭包 (function(){ var a = 10; document.onclick = function(){ console.log( ++a );//使用的是外部函数的a } })(); //产生了闭包,此时a为局部变量,但不会被回收 /* 闭包产生的条件: 1. 外部函数 嵌套 内部函数 2. 内部函数使用了外部函数的参数或变量 称这个内部函数为闭包 闭包产生的影响: 被引用的 参数/变量 不会被回收 */

    闭包使用的情况

    <p>0</p> <p>1</p> <p>2</p> <p>3</p>

    无法得到序号

    var aP = document.getElementsByTagName("P"); for( var i=0;i<aP.length;i++){ aP[i].onclick = function(){ console.log(i);//无法得到序号,无论点哪个得到的都是循环结束后的值--4 } }

    使用闭包

    var aP = document.getElementsByTagName("P"); for( var i=0;i<aP.length;i++){//a (function(i){//c aP[i].onclick = function(){//d console.log(i);//e }; })(i);//b } //ab处的i是同一个i cde处的i是同一个i //ES6使用let,作用与闭包相同 var aP = document.getElementsByTagName("P"); for( let i=0;i<aP.length;i++){ aP[i].onclick = function(){ console.log(i); } }
    Processed: 0.011, SQL: 9