深入浅出Javascript:面向对象之闭包

明白闭包

观点

闭包是指 有权接见另一个函数作用域中的变量的 函数。

函数式闭包(在内部保留数据和对外部无副作用)

建立要领

在一个函数内部建立另一个函数(闭包)

道理

一般函数:在outer()实行完,局部变量local被烧毁,内存仅仅保留全局作用域。

function outer() {
    var localVal = 30;
    return localVal;
}
outer(); // 30

闭包:在outer()实行后,func()依然能够接见outer()内部的localVal,因为func()将outer()的内的运动对象(localVal)增加到了func()的作用域链。在outer()实行后,因为localVal被func()的作用域链所援用,所以localVal不会被烧毁,而是存在内存中,直到func()被烧毁,才会随之烧毁。

function outer() {
    var localVal = 30;
    return function() {
        return localVal;
    }
}
var func = outer();
func(); // 30

闭包的运用

  • 监听事宜
!function() {
    var localData = "localData here";
    document.addEventListener('click',
        function() {
            console.log(localData);
        }
    );
}();
  • ajax事宜
!function() {
    var localData = "localData here";
    var url = "http://www.baidu.com/";
    $.ajax({
        url: url;
        success: function() {
            console.log(localData);
        }
    });
}();

毛病的运用

轮回

运用闭包封装函数,便于运用私有变量。

闭包的优劣

  • 优点:天真轻易,封装
  • 害处:空间糟蹋,内存走漏(轮回援用),机能斲丧
    原文作者:幸运儿
    原文地址: https://segmentfault.com/a/1190000005013790
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞