ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

闭包的特点和应用

2022-01-28 11:32:08  阅读:236  来源: 互联网

标签:闭包 function console 应用 ++ 特点 m1 m3 var


在JS当中,一个函数可以访问其外部的变量资源。

一个典型的代码

但以下这种情况会出错。

function m1(){
    var a = 100;
    console.log(a++);
}

function m2(){
    console.log(a++);   //这里无法访问a
}

如果,我们想在m2的作用域里,访问m1里的变量,就像下面这样:

首先,我们可以在m1的内部创建一个函数m3

function m1(){
    var a = 100;
    function m3(){
        console.log(a++);
    }
}

m3可以正常访问a,接下来我们增加一个return操作。

function m1(){
    var a = 100;
    return function m3(){
        console.log(a++);
    }
}

既然有了返回值,那我们不妨接收一下,继续编写代码如下:

function m1(){
    var a = 100;
    return function m3(){
        console.log(a++);
    }
}
var _m3 = m1();

我们执行了函数m1, 并将返回值赋值给_m3

那么目前_m3m3函数是等价的,即它们是同一个函数。

有了_m3,一切都好办了。我们继续编写代码

function m1(){
    var a = 100;
    return function m3(){
        console.log(a++);
    }
}
var _m3 = m1();

function m2(){
    _m3();
}

因为_m3是全局变量,因此m2可以调用_m3

也就等价于m2间接的,访问到了变量a

通常,我们管m3,叫做一个『 闭包函数 』

应用场景一:setTimeout

原生的setTimeout有一个缺陷,你传递的第一个函数不能带参数。即

setTimeout(func(parma),1000);

这样的语句是不生效的(不过在不同浏览器中有不同的错误,总之都无法达到预期效果)

这时,我们就可以用闭包来实现这个效果了。

function func(param) {

    return function() {

        alert(param);

    }

}

var f = func(1)

setTimeout(f, 1000);

标签:闭包,function,console,应用,++,特点,m1,m3,var
来源: https://blog.csdn.net/lz1412/article/details/122728783

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有