JavaScript中的闭包介绍


Posted in Javascript onMarch 15, 2015

所谓的闭包应该是指: 内部函数读取当前函数以外的变量,即创建时所处的上下文环境。

function hello(){

    var char = "hello,world";

    function print(){

        console.log(char);

    };

    return print();

}

需要注意的是这里的print函数引用了外部hello函数的char变量,于是在这里我们能够返回一个
hello,world

而这个功能在某种意义上来说,应该是要归功于作用域。当然了,我们没有办法直接访问char,除非是我们声明这个变量的时候出错了。如
function hello(){

    char = "hello,world";

    function print(){

        console.log(char);

    };

    return print();

}

仅仅是因为少了个var。
在这里hello变成一个闭包 了。 闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。

Javscript 闭包与this

需要注意的是读取this与arguments时,可能是会出问题的。

function hello(){

    this.char = "hello,world";

    function output(){

        char = "I'm no hello world";       

        console.log(this.char);

    };

    return output();

}

当然了这个例子并不够贴切,so,我们需要一个额外的例子来解释这个问题,下面引用一个《Javascript高级程序设计》中的一个例子,来说明这个问题。
var name = "The window";
var object = {

    name: "My Object",
    getNameFunc: function(){

        return function(){

            return this.name;

        }

    }

};

object.getNameFunc()()

只是这种用法实在是,而解决方法便是保存一个临时变量that,如之前在《关于Javascript的this的一些知识》一文中所说的。
var name = "The window";

var object = {

    name: "My Object",
    getNameFunc: function(){

        var that = this;

        return function(){

            return that.name;

        }

    }

};

object.getNameFunc()()

Javscript 闭包与读写变量
值得注意的是,如果我们没有处理好我们的变量时,我们也可以修改这些变量。
function hello(){

    var char = "hello,world";

    return{

        set: function(string){

            return char = string;

        },

        print: function(){

            console.log(char)

        }

    }

}

var say = hello();

say.set('new hello,world') 

say.print() // new hello world

Javascript 闭包与性能

引用MDC的说法

 如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。

文上还说到。
 例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。原因是这将导致每次构造器被调用,方法都会被重新赋值一次(也就是说,为每一个对象的创建)。
Javascript 相关文章推荐
JS模拟多线程
Feb 07 Javascript
判断控件是否已加载完成的代码
Feb 24 Javascript
javascript学习之闭包分析
Dec 02 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
Aug 11 Javascript
javascript变量声明实例分析
Apr 25 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
Sep 17 Javascript
实例解析Vue.js下载方式及基本概念
May 11 Javascript
JS实现自定义弹窗功能
Aug 08 Javascript
jquery获取img的src值实例介绍
Jan 16 jQuery
详解Vue-cli3.X使用px2rem遇到的问题
Aug 09 Javascript
JS实现动态星空背景效果
Nov 01 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
Jul 19 Javascript
Javascript中的匿名函数与封装介绍
Mar 15 #Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 #Javascript
Javascript中的apply()方法浅析
Mar 15 #Javascript
Javascript中的Callback方法浅析
Mar 15 #Javascript
Javascript中的call()方法介绍
Mar 15 #Javascript
Javascript中的高阶函数介绍
Mar 15 #Javascript
Javascript中this关键字的一些小知识
Mar 15 #Javascript
You might like
PHP 上传文件大小限制
2009/07/05 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
通过DOM脚本去设置样式信息
2010/09/19 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
python中kmeans聚类实现代码
2018/02/23 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
python的常见矩阵运算(小结)
2019/08/07 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
Django如何实现上传图片功能
2019/08/16 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
新东网科技Java笔试题
2012/07/13 面试题
超市后勤自我鉴定
2014/01/17 职场文书
大型会议接待方案
2014/03/01 职场文书
公益广告语集锦
2014/03/13 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
2014年部门工作总结
2014/11/12 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书