js闭包详解

作者: Aniugel | 来源:发表于2019-08-04 23:47 被阅读0次

一、闭包的相关概念

image.png

二、案例解析

function foo(x) {
        var temp = 3;
        return function (y) {
            console.log(x + y + (++temp))
        }
    }
    var bar = foo(2)
    bar(10); //2+3 +11=16
    bar(20);//2+3 +11=27

分析:
1、函数可以作为一个变量返回值
2、bar 变量作为foo函数的返回值,指向的是一个函数
3、虽然foo函数已经执行完,temp变量已经离开了它的定义环境,但是他的内部变量temp被bar一直引用,所以temp不会被释放,导致foo函数的闭包环境一直驻留在内存中。大部分人也认为bar是闭包对象

三、闭包的运用

1、匿名自执行函数(也叫即时函数)模拟块级作用域

var a = 9;
    (function (a) {
        // 块级作用域环境
        console.log(a)//8
    })(8)

2、循环注册dom事件中的index

image.png

3、setTimeOut中的闭包应用

 // 事件循环机制
    // for (var i = 0; i < 100; i++) {
    //     setTimeout(function () {
    //         console.log(i)//100个  100
    //     }, 1000)
    // }

    //闭包的运用
    for (var i = 0; i < 100; i++) {
        (function (a) {
            setTimeout(function () {
                console.log(a)//100个  100
            }, 1000)
        })(i)
    }

4、点击按钮每次累加

// 全局作用域
    var counter = 0;
    function add() {
        return counter += 1;
    }
    console.log(add())//1
    console.log(add())//2
    console.log(add())//3

    // 局部作用域
    // function click() {
    //     var m = 0;
    //     // 块级作用域环境
    //     return function () {
    //         console.log(++m)//每次累加 1
    //     }
    // }

    // var foo = click()
    // foo()//1
    // foo()//2
    // foo()//3

四、闭包的缺点

image.png

相关文章

  • 详解js闭包

    详解js闭包 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实...

  • js闭包 详解

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包的特...

  • 详解js闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包的特...

  • JS 闭包详解

    闭包是可以用作函数参数和方法参数的代码块,是指有权访问另一个函数作用域中的变量的函数。因为在JS中,在另一个函数内...

  • js闭包详解

    一、闭包的相关概念 image.png 二、案例解析 分析:1、函数可以作为一个变量返回值2、bar 变量作为fo...

  • js闭包详解

    1.什么是闭包? 要了解什么是闭包,首先你要了解作用域。 js的作用域分两种,全局作用域和局部作用域。 我们知道在...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • JS闭包

    JS闭包 闭包练习

  • 详解js 闭包(closure)

    本文引用https://zhuanlan.zhihu.com/p/25655417博客 著作权归作者所有。商业转载...

  • js闭包问题详解

    传言很多互联网公司不是停止招聘就是裁员的,相比春节后肯定有很多前端程序员需要找工作,于是就免不了面试了,本人就分享...

网友评论

    本文标题:js闭包详解

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