JS中的闭包
2017-05-04 本文已影响0人
osoLife
逃脱(内部函数脱离定义它们的外部函数)
全局变量
var n2;
function fn1(){
var n1=1;
function fn2(){
console.log(n1);
}
n2=fn2;
}
fn1();
n2(); //1
返回值
function fn1(){
var n1=1;
function fn2(){
console.log(n1);
}
return fn2;
}
fn1()(); //1
实现一个变量的累加
全局变量
var num=0;
function add(){
num++;
return num;
}
alert(add()); //1
alert(add()); //2
使用闭包
function add(){
var num=0;
return function(){
num++;
return num;
};
}
var fn=add();
alert(fn()); //1
alert(fn()); //2
闭包中的this(默认指向window)
var name='moli';
var obj={
name:'michael',
fn:function(){
return function(){
return this.name;
};
}
};
alert(obj.fn()()); //moli(this指向window)
//改变this指向方法一
var name='moli';
var obj={
name:'michael',
fn:function(){
return function(){
return this.name;
};
}
};
alert(obj.fn().call(obj)); //michael(this指向obj)
//改变this指向方法二
var name='moli';
var obj={
name:'michael',
fn:function(){
var _this=this; //obj
return function(){
return _this.name;
};
}
};
alert(obj.fn()()); //michael(this指向obj)
结束语
如果喜欢本文,记得点赞并加关注哟。