码迷,mamicode.com
首页 > 其他好文 > 详细

闭包,this指向,内存泄漏

时间:2017-07-31 20:03:39      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:属性   执行   var   box   表达式   内存   use   function   对象   

通过自我执行来执行匿名函数
(function(){ //(匿名函数)(); 第一圆括号放匿名函数,是一个表达式,第二圆括号执行
return ‘Lee‘;
})();

//把匿名函数自我执行的返回值赋值给变量
var box=(function(){
return ‘Lee‘;
})();
alert(box);

//自我执行匿名函数的传参
(function(age){
alert(age);
})();


//闭包,函数里面放一个匿名函数
function box(){
return function(){ //闭包
return ‘Lee‘;
}
}
alert(box()());

//通过闭包返回局部变量
function box(){
var user=‘Lee‘;
return function(){ //通过匿名函数返回box()局部变量
return user;
};
}
alert(box()());

//使用匿名函数实现局部变量驻留内存中从而累加
function box(){
var age=100;
return function(){
age++;
return age;
}
}
var b=box();
alert(b());
alert(b());
alert(b());
alert(b());
b=null; //解除引用,等待垃圾回收

//循环里匿名函数取值问题


function box(){
var arr=[];
for(var i=0;i<5;i++){
arr[i]=function(){
return i;
}
}
return arr;
}

var b=box();
for(var i=0;i<b.length;i++){
alert(b[i]()); //[5,5,5,5,5]
}

//改1

function box(){
var arr=[];
for(var i=0;i<5;i++){
arr[i]=(function(num){ //通过自我及时执行匿名函数
return num;
})(i);
}
return arr;
}

var b=box();
for(var i=0;i<b.length;i++){
alert(b[i]()); //[0,1,2,3,4]
}

//改2 这种方法用的更多

function box(){
var arr=[];
for(var i=0;i<5;i++){
arr[i]=(function(num){
return function(){ //因为闭包可以将变量驻留在内存中
return num;
}
})(i);
}
return arr;
}
var b=box();
for(var i=0;i<b.length;i++){
alert(b[i]());
}

//关于this对象
var box={
getThis:function(){
return this;
}
}
alert(box.getThis()); //[object Object]


var box={
getThis:function(){
return function(){ //闭包在运行时指向window,因为闭包并不属于这个对象的属性或方法。
return this;
}
}
}
alert(box.getThis()()); //[object Window]

var box={
user:‘The Box‘,
getUser:function(){
return function(){
return this.user;
}
}
}
alert(box.getUser().call(box)); //对象冒充,就可以指向box,打印出The Box


下面是重点:
var box=‘The Window‘;
var box={
user:‘The Box‘,
getUser:function(){
//这里作用域的this是Box
var that=this;
return function(){
//这里作用域的this是window
return that.user;
}
}
};

alert(box.getUser()()); //打印出The Box

 

闭包,this指向,内存泄漏

标签:属性   执行   var   box   表达式   内存   use   function   对象   

原文地址:http://www.cnblogs.com/gengxinnihaoma/p/7264747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!