资讯专栏INFORMATION COLUMN

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

instein / 2209人阅读

摘要:理解闭包概念闭包是指有权访问另一个函数作用域中的变量的函数。闭包在执行后,仍然可以访问内部的,因为将的内的活动对象添加到了的作用域链。闭包的应用监听事件事件错误的使用循环使用闭包封装函数,便于使用私有变量。

理解闭包 概念

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

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

创建方法

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

原理

普通函数:在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://www.ucloud.cn/yun/79313.html

相关文章

  • JavaScript深入浅出

    摘要:理解的函数基础要搞好深入浅出原型使用原型模型,虽然这经常被当作缺点提及,但是只要善于运用,其实基于原型的继承模型比传统的类继承还要强大。中文指南基本操作指南二继续熟悉的几对方法,包括,,。商业转载请联系作者获得授权,非商业转载请注明出处。 怎样使用 this 因为本人属于伪前端,因此文中只看懂了 8 成左右,希望能够给大家带来帮助....(据说是阿里的前端妹子写的) this 的值到底...

    blair 评论0 收藏0
  • 面向对象JavaScript

    摘要:是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在。而在基于原型的面向对象方式中,对象则是依靠构造器利用原型构造出来的。 JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或者只是部分具备一些面向对象的特征。本文将回归面向对象本意,从对语言感悟的角度阐述为什...

    novo 评论0 收藏0
  • JS程序

    摘要:设计模式是以面向对象编程为基础的,的面向对象编程和传统的的面向对象编程有些差别,这让我一开始接触的时候感到十分痛苦,但是这只能靠自己慢慢积累慢慢思考。想继续了解设计模式必须要先搞懂面向对象编程,否则只会让你自己更痛苦。 JavaScript 中的构造函数 学习总结。知识只有分享才有存在的意义。 是时候替换你的 for 循环大法了~ 《小分享》JavaScript中数组的那些迭代方法~ ...

    melody_lql 评论0 收藏0
  • JavaScript系列(四) - 收藏集 - 掘金

    摘要:函数式编程前端掘金引言面向对象编程一直以来都是中的主导范式。函数式编程是一种强调减少对程序外部状态产生改变的方式。 JavaScript 函数式编程 - 前端 - 掘金引言 面向对象编程一直以来都是JavaScript中的主导范式。JavaScript作为一门多范式编程语言,然而,近几年,函数式编程越来越多得受到开发者的青睐。函数式编程是一种强调减少对程序外部状态产生改变的方式。因此,...

    cfanr 评论0 收藏0
  • javasscript - 收藏集 - 掘金

    摘要:跨域请求详解从繁至简前端掘金什么是为什么要用是的一种使用模式,可用于解决主流浏览器的跨域数据访问的问题。异步编程入门道典型的面试题前端掘金在界中,开发人员的需求量一直居高不下。 jsonp 跨域请求详解——从繁至简 - 前端 - 掘金什么是jsonp?为什么要用jsonp?JSONP(JSON with Padding)是JSON的一种使用模式,可用于解决主流浏览器的跨域数据访问的问题...

    Rango 评论0 收藏0

发表评论

0条评论

instein

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<