首页 > Web开发 > 详细

js闭包

时间:2020-04-01 21:38:57      阅读:80      评论:0      收藏:0      [点我收藏+]

需求:点击某个按钮,提示点击的是第n个按钮

    var btns=document.getElementsByTagName(‘button‘);
    for(var i=0;i<btns.length;i++){
        var btn=btns[i];
        btn.onclick=function () {
            alert(‘点击‘+(i+1)+‘个‘);
        }
    }

  运行上面的代码,i始终是btns.length+1

改进:

   var btns=document.getElementsByTagName(‘button‘);
    for(var i=0;i<btns.length;i++){
        (function (i) {
            var btn=btns[i];
            btn.onclick=function () {
                alert(‘点击‘+(i+1)+‘个‘);
            }
        })(i);
    }

  如何产生闭包:

当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包.

使用chrome调试查看

技术分享图片

 

 

 理解一:闭包是嵌套的内部函数

理解二:包含被引用变量(函数)的对象

注意:闭包存在于嵌套的内部函数中

常见的闭包使用形式:

1.将函数作为另一个函数的返回值

  

function  fn1() {
    var num=10;
    function fn2(){
        num++;
        console.log(num);
    }
    return fn2;
}
var f=fn1();
f();//11
f();//12

  技术分享图片

 

2.将函数的形参作为实参传递给另一个函数调用.

//大的函数中包含小的函数,小函数中引入了大函数的变量,就形成了闭包
function logMsgDelay(msg,time) {
    setTimeout(function () {
        console.log(msg);
    },time);
}
logMsgDelay(‘老石‘,1000);

  技术分享图片

 

js闭包

原文:https://www.cnblogs.com/sunliyuan/p/12615763.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!