闭包,this指向,内存泄漏

Posted 耿鑫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包,this指向,内存泄漏相关的知识,希望对你有一定的参考价值。

通过自我执行来执行匿名函数
(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指向,内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

闭包可能导致的内存泄漏

JavaScript内存管理闭包和内存泄漏

闭包会造成内存泄漏吗?

闭包为什么会造成内存泄漏?

闭包为什么会造成内存泄漏?

闭包为什么会造成内存泄漏?