这篇文章主要帮助大家轻松学习掌握 Javascript 闭包函数,从闭包的含义出发,由浅入深学习 Javascript 闭包函数,感兴趣的小伙伴们可以参考一下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
闭包函数是什么在开始学习的闭包的时候,大家很能都比较难理解. 就从他的官方解释来说, 都是比较概念化的.
不过我们也还是从闭包的含义出发。
闭包是指函数有自由独立的变量。换句话说,定义在闭包中的函数可以 "记忆" 它创建时候的环境。
官方解释说完后, 我们先来看一个简单计数的例子.
- var c = 0;
- function count() {
- c++;
- }
- count(); // 1
- count(); // 2
这个例子是利用了全局变量来实现, 但是这里有个问题是, c 这个变量也容易被其他方式所调用, 这时候就可能会改变 c 的存储值. 造成这个 count 计数的失效. 那怎么很好的处理这个问题呢! 我们会想到的是使用局部变量的方式来处理. 比如:
- function count() {
- var c = 0;
- function add() {
- c++;
- }
- add();
- }
- count(); // c = 1
- count(); // c = 1
因为这样创建之后, 内部变量只存在于 count 函数创建执行的时候, 执行完之后, 整个函数就会被丢弃掉. 就无法达到有记忆的能力. 那要怎么来实现呢? 那我们就用闭包来解决. 我要重新提一次: 闭包 = 函数 + 环境
- function count(){
- var c = 0;
- function add(){
- c++;
- }
- return add;
- }
- var ct = count();
- ct(); // c = 1
- ct(); // c = 2
这个时候我们就可以通过这个闭包来完成计数的能力. ct 就是一个闭包函数, 内部的环境就是这个局部变量 c. 这里我们达到的就是内部数据, 外部来操作. 那闭包除了这个还有什么其他功能呢
用闭包模拟私有方法
这有点像 JAVA 的私有方法或者私有变量, 只能允许自己来操作! 如果外部操作, 就需要设定公开的方法来操作.
- var person = (function(){
- var _name = "编程的人";
- var age = 20;
- return {
- add:function(){
- age++;
- },
- jian:function(){
- age--;
- },
- getAge:function() {
- return age;
- },
- getName:function(){
- return _name;
- },
- setName: function (name) {
- _name = name;
- }
- }
- })();
- person.add();
- var age = person.getAge();
- console.log(age)
- person.setName("编程的人公众号:bianchengderen")
- console.log(person.getName())
这里应该很容易理解了吧! 有点面向对象编程的感觉。当然 Javascript 现在也有面向对象编程的特点. 这点我们以后来说明.
目前为止,我们从计数到内部私有化的例子,来说明闭包, 希望大家能简单明白其中的道理,当然闭包还有其他的功能利用是比较方便的。
来源: