博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript匿名函数与闭包
阅读量:4954 次
发布时间:2019-06-12

本文共 1231 字,大约阅读时间需要 4 分钟。

匿名函数是相对于有名字的函数

如function setAge(){}函数名为setAge

而类似于function(){}则就是一个匿名函数

有名字的函数执行时可以写成setAge(),而没有名字的函数则执行要写成(function())();

另一种方式是把匿名函数赋值给一个变量来使用

var a=function(){alert("hello,world");}a();

匿名函数传参

(function(age){return age;})(100);

匿名函数产生闭包

闭包简单来说就是一个函数里面还有函数(一般来说是匿名函数),看代码:

function box(){var a=10;return function(){alert("hello") }} box()//返回function(){ alert("hello") }一串代码 box()()//再加一个()才执行了匿名函数,返回hello

关于闭包解释,上面的说明太粗俗了,下面具体说明

有权访问另一个函数作用域内变量的函数都是闭包

闭包源于js作用域链问题,在js中局部变量可以直接访问全局变量,而全局变量无法访问局部变量

function box(){

var a=10;

}

alert(a)//未定义,全局无法访问函数体内的var a=10变量,但有时我们需要外部能够取得这个局部的a变量,这时我们怎么做呢?闭包方式来了

利用js中局部变量可以直接访问全局变量,而全局变量无法访问局部变量这一原理,我们在box(){}内再构建一个函数,这事var a对于这个新构建的函数来说就是他的“全局变量”

例如

function getCircle(){var pi=3.1415926;//局部变量,怎样要外面的alert取得pi呢return function (){//写一个函数,这个函数可以取得pi的值  return pi;//这个pi值一旦调用getCircle()就可以return出匿名函数里的这个pi}}alert(getCircle()());

使用闭包的好处有什么?

在js中一旦function执行完毕,里面的变量都会被垃圾回收,被销毁,可以这样理解,js中局部变量优先于全局变量执行,函数体执行完毕后,就被销毁,所以全局变量就无法访问局部了。在一些情形中,我们需要将局部变量保存下来,我们就要用到闭包了。

总结:闭包好处:

一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 

function box(){var a=0;return function(){    a=a+1;return a;}}var b=box();b();//1b();//2

每次执行一次b() var a都不会清零,而是保留了上次的结果!

 

转载于:https://www.cnblogs.com/luojunweb/p/7056316.html

你可能感兴趣的文章
讲课流程
查看>>
程序员的9句名言
查看>>
判断身份证法则
查看>>
Spring第九弹—使用CGLIIB实现AOP功能与AOP概念解释
查看>>
栈与队列_数据结构
查看>>
D - Cheerleaders(第三周)
查看>>
多线程入门
查看>>
一个周末掌握IT前沿技术之node.js篇
查看>>
灵光一现,代码实现
查看>>
循环语句的嵌套及练习题
查看>>
Android开发调试Installation failed since the device possibly has stale dexed jars
查看>>
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
查看>>
DOM查询
查看>>
JavaScript开启浏览器全屏模式
查看>>
linux下结束进程
查看>>
配置自动启动fastDFS
查看>>
javascript阻止事件冒泡和浏览器的默认行为
查看>>
Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版...
查看>>
C#网络编程-TcpClient、TcpListener、UdpClient
查看>>
HDOJ 1009 FatMouse' Trade
查看>>