码迷,mamicode.com
首页 > Web开发 > 详细

关于js的闭包和匿名函数

时间:2019-03-07 16:00:33      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:log   efi   obj   get   class   function   函数   UNC   i+1   

关于js闭包。之前我一直以为是匿名函数,以为封闭式的创建即执行销毁就是闭包,其实这是匿名函数,不一样的。也没有闭包的使用经验。

后来去网上查了下才知道,闭包的意思是:函数内部还有函数,返回一个函数,内部函数可访问外部函数的变量

一个最简单的案例:

a是外部函数,b是内部函数,b可以使用a的变量i,调用a函数返回b函数,执行c既是执行b。其实也就意味着在a函数的外部,读取到了a函数内部的变量值。

a中的变量i将一直在内存中,直至c变量删除。

删除变量:delete c;

{
	let a=function(){
		let i=1;
		let b=function(){
			console.log(i+1)
		}
		return b;
	}
	let c=a();
	c();//2
}

obj.geta()输出2,this代表当前对象。而闭包(内部函数)中的this代表window,这里为什么不输出1呢?因为这个a是let声明赋值的,不会传给window。

return function是直接返回一个匿名函数

{
	let a=1;
	let obj={
		a:2,
		geta:function(){
			console.log(this.a)
			return function(){
				console.log(this.a)
			}
		}
	}
	let c=obj.geta();//2
	c();//undefined
}

用这种方式就可以了,外部将this赋值给一个新变量,再给闭包

{
	let a=1;
	let obj={
		a:2,
		geta:function(){
			let _this=this;//将this赋值给_this再给闭包
			console.log(this.a)
			return function(){
				console.log(_this.a)
			}
		}
	}
	let c=obj.geta();//2
	c();//2
}

 

关于js的闭包和匿名函数

标签:log   efi   obj   get   class   function   函数   UNC   i+1   

原文地址:https://www.cnblogs.com/wuhairui/p/10488244.html

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