javascript基础篇(6)之函数表达式闭包_javascript技巧

javascript基础篇(6)之函数表达式闭包_javascript技巧

ID:30768827

大小:252.04 KB

页数:9页

时间:2019-01-03

javascript基础篇(6)之函数表达式闭包_javascript技巧_第1页
javascript基础篇(6)之函数表达式闭包_javascript技巧_第2页
javascript基础篇(6)之函数表达式闭包_javascript技巧_第3页
javascript基础篇(6)之函数表达式闭包_javascript技巧_第4页
javascript基础篇(6)之函数表达式闭包_javascript技巧_第5页
资源描述:

《javascript基础篇(6)之函数表达式闭包_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JavaScript基础篇(6)之函数表达式闭包其实js支持函数闭包的主要原因是因为js需要函数能够保存数据。这里的保存数据是只函数在运行结束以后函数内变量的值也会进行保存。至于为什么js需要在函数内可以保存数据,那就是js是一种函数式语言。在函数内保存数据是函数式语言的一大特征。回顾前面介绍过的三种定义函数方式functiosu(numnumreturnunum//函数声明语法定义vasufunction(nunmum)returnunu//函数表达式定义vasuneFunction(〃nunT〃numz,,,returnunumz,)//Functio构造

2、函数在分析闭包Z前我们先來看看,定义和调用函数容易犯的错误。例1:saylliO;//错误:函数还不存在varsayHi=function(){alert("test");};例2:if(true){functionsayHi(){alert(〃1〃);}}else{functionsayHi(){alert("2");}}saylliO;//打印结果并不是我们想要的例3:varfiml二functionfun2(){alert("test");fun2();//错误:函数还不存在在例1中,我们不能在使用函数声明式语法定义之前调用函数。解决方案:1.如果使用函

3、数表达式定义函数的话,需要在表达式定义后调用。varsaylli=function(){alert("test");};sayHi()2•使用函数声明式。(这里浏览器引擎会函数声明提升,在所有代码执行之前先读取函数声明)sayHi();functionsayHi(){alert("test");};在例2中,我们预期的结果应该是打印1,实际结果是打印2。if(true){functionsayHi(){alert("1");}}else{functionsaylli(){alert("2");}}sayHi();//打印结果并不是我们想要的为什么会这样?止因为

4、函数声明提升,所以浏览器在预解析的时候不会判断if条件,直接解析第二个函数定义的时候覆盖了第一个。解决方案:varsayHi;if(true){sayHi=function(){alert(T‘);}}else{saylli=function(){alert(〃2〃);}}sayHi();在例3中,发现只能只用fun1()调用,而不能使用fun2()调用。我自己的理解,真正原因不知道。没找到资料。因为1:functionfun3(){};等效与varfun3=functionfun3(){};如图:un3:functionfur)3()arguments:nu

5、llcalle^:null:0图二debugger;functionvar

6、fun3natre:口ptttpe:fun3proto:function()•innu(rcna所以只能只用funlO调用,而不能使用fun2()调用。其实这里我述是有疑问的?哪位大神知道,望告知。既然,fun2在外面不能调用为什么在函数内部能调用?虽然在debugger还是得不到funlo0涵敎乘达xC.htmlXEDft©UAsync•Servingfromthefilesystem?Addyourfilesintotheworkspace,mone▼Watch丁千uni:〈no

7、七availBbl已〉

8、vCallStackfun1vari=0;.varFun2=-Functionfunl](){ifif#空土debugs®1*i}他n2C);Nev“showK虽然阔试到亦1是不可用的。但罡■在代冯里面还是可以正常岚疔。(anonymousfunction)▼Scope▼LQC91►this:Window►GlobaL好了,通过上面的三道题目热身。我们继续今犬的主题“闭包”O1•什么是闭包?定义:就是冇权访问另一个函数作用域的变量的函数我们先从一个示例函数开始:例1:functionfun(){vara二"弓长三〃;}fun();//在

9、我们执行完后,变量a就被标记为销毁了例2:functionfun(){vara二〃张三〃;rcturnfunction(){alert("test");}}varf二fun();//同样,在我们执行完后,变量a就被标记为销毁了例3:functionfun(){vara二"张三〃;returnfunction(){alert(a);}varf=fun();//【现在情况发生变化了,如果&被销毁,显然f被调用的话就不能访问到变量3的值了】f();//【然后变量a的值正常的被访问到了】//这就是闭包,当函数A返冋的函数B里面使用到了函数A的变量,那么函数B就使用了闭

10、包。示例:functionfun(){

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。