今天来聊聊闭包

闭包:就是能读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   // 此样例来此 阮一峰的个人日志
function fn1(){
var n=1;
add=function(){n=n+1}
function fn2(){
alert(n)
}
return fn2;
}
var fn=fn1()
//可以实现一个计数器
var b=function(){
var n=0;
var test=function (){
n=n+1
console.log(n)
};
return test
}
var main=b()
main(); //1
main(); //2
main(); //3
js

今天来聊聊JavaScript的 函数的多种形式

我们在项目中经常会写function, 基本就是一个需求或者一个功能我们就写一个function,这样会有很多过程,其实JavaScript也是面向对象的,我们可以尝试用对象的方式来写函数,你会发现不一样的天地。
比如我们在处理一个请假申请过程中,里面会有很多js方法,比如验证、数据格式化、异步获取等方法,我们通常的方式是n个function累加,这样有一个不好的地方就是我们会创建很多全局变量,其实我们完全可以有多种形式来处理我们的各种业务函数。

1.用对象来收编函数

1
2
3
var obj={fn:function(){
}
}

2.对象的另外一种形式

1
2
3
4
var obj=function(){};
obj.fn=fucntion(){

};

3.对象的又一种方式

1
2
3
4
5
var obj=function(){
return {
fn:function(){}
}
}

4.类的形式

1
2
3
var obj=function(){
this.fn=function(){}
}

5.原型的形式

1
2
3
4
5
6
7
8
9
10
11
12
 //形式1
var obj=function(){};
obj.prototype.fn=function(){};
//形式2
var obj1=function(){}
obj1.prototype={fn:function(){}}
//形式3
Function.prototyp.addMethods=function(name,fn){
this[name]=fn;
}
var fn=new Function()
fn.addMethods("fn1",function(){})
js