关于js的闭包和匿名函数

关于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
}

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

时间: 2024-10-07 05:34:46

关于js的闭包和匿名函数的相关文章

php闭包与匿名函数

不知不觉发现PHP已经出到了5.5版本,而自己一直在用PHP5.2,让我看起来像深山出来的小伙子一样,又土又落后.在我习惯在javascript中使用闭包之后,忽然间对PHP的闭包打起了兴趣. 于是乎在网上下了个WAMP集成开发环境,是PHP5.3版本的(PHP5.3开始引入了闭包的特性),不得不说WAMP安装使用真的很方便.简单配置了一下,开始动手. 匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它.声明一个匿名函数是这样: 1 $fun

PHP中的闭包和匿名函数

PHP中的闭包和匿名函数 闭包是指在创建时封装周围状态的函数.即使闭包所在的环境不存在了,闭包中封装的状态依然存在. 匿名函数就是没有名称的函数.匿名函数可以赋值给变量,还能像其他任何PHP对象那样传递.不过匿名函数仍是函数,因此可以调用,还可以传入参数.匿名函数特别适合作为函数或方法的回调. 注意:理论上讲,闭包和匿名函数是不同的概念.不过,PHP将其视作相同的概念.所以,我们提到闭包时,指的也是匿名函数,反之亦然. PHP闭包和匿名函数使用的句法与普通函数相同,但闭包和匿名函数其实是伪装成函

浅析PHP中的闭包和匿名函数

PHP闭包和匿名函数使用的句法与普通函数相同,但闭包和匿名函数其实是伪装成函数的对象(Closure类的实例) .下面给大家介绍PHP中的闭包和匿名函数知识,需要的朋友参考下吧 闭包是指在创建时封装周围状态的函数.即使闭包所在的环境不存在了,闭包中封装的状态依然存在. 匿名函数就是没有名称的函数.匿名函数可以赋值给变量,还能像其他任何PHP对象那样传递.不过匿名函数仍是函数,因此可以调用,还可以传入参数.匿名函数特别适合作为函数或方法的回调. 注意:理论上讲,闭包和匿名函数是不同的概念.不过,P

js闭包,匿名函数概念

var functionName = function(arg){ //函数体 }; 匿名函数:创建一个函数,并将它赋值给一个变量,这种情况下创建的函数叫做匿名函数,因为function关键字后面没有标识符.(匿名函数有时候也叫拉姆达函数).匿名函数的name属性是空字符串. 注:FireFox.Safari.Chrome和Opera都给函数定义了一个非标准的name属性,通过这个属性可以访问给函数指定的名字.这个属性的值永远等于跟在function关键字后面的标识符. 闭包是指有权访问另一个函

【JS进阶3】闭包和匿名函数

想要学习闭包先来看看什么是匿名函数吧!   (一)匿名函数        匿名函数就是没有名字的函数.他有两种声明方式:        1.典型的函数声明:        function functionName(arg0,arg1,arg2){            //函数体        }        2.函数表达式:        var functionName = function(arg0,arg1,arg2){            //函数体        }   虽然这

JavaScript中的闭包与匿名函数

知识内容: 1.预备知识 - 函数表达式 2.匿名函数 3.闭包 一.函数表达式 1.定义函数的两种方式 函数声明: 1 function func(arg0, arg1, arg2){ 2 // 函数体 3 } 函数表达式: 1 var func = function (arg0, arg1, arg2){ 2 // 函数体 3 } 2.注意事项 函数表达式使用前必须赋值!像下面的代码是错误的: 1 say() 2 var say = function(){ 3 console.log("12

闭包和匿名函数

在高级程序设计里,描述闭包是指有权访问另一个函数作用域中的变量的函数. 而经常创建方式是一个函数里包含另一函数. 而匿名函数就如"匿名"这两个意思一样. 所以匿名函数和闭包不是同一个概念. 在高级程序设计里描述匿名函数的执行环境具有全局性,所以this指向为window.这就是 为什么有时候发现this指向,不是自己所想的对象的问题. <!DOCTYPE html> <html lang="en"> <head> <meta

js事件绑定--支持匿名函数解除绑定

废话不多说,直接上代码 var handlers = {}, bind = (function (){ if(window.addEventListener){ return function (el, type, callback, capture){ el.addEventListener(type, function (){ callback(); handlers[type] = handlers[type] || []; handlers[type].push(arguments.ca

[Js/Jquery]立即执行匿名函数

摘要 有时使用js写了一个匿名方法,需要立即执行.因为没有方法名称,无法在其它地方调用. 匿名函数 匿名函数,可以认为是没有方法名称的函数. js中如果想执行匿名函数,结构如下: (function () { //逻辑代码 })() 使用()将匿名函数括起来,后面再加一对小括号(包含参数列表). 例如: alert((function (x, y) { return x + y; })(2, 3)); 命名函数自调用 (function myfunc() { alert("23333"