- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaScript闭包
JavaScript 闭包 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个对 Array 的求和。通常情况下,求和的函数是这样定义的: function sum(arr) { return arr.reduce(function (x, y) { return x + y; }); } sum([1, 2, 3, 4, 5]); // 15 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数! function lazy_sum(arr) { var sum = function () { return arr.reduce(function (x, y) { return x + y; }); } return sum; } 当我们调用 lazy_sum()时,返回的并不是求和结果,而是求和函数: var f = lazy_sum([1, 2, 3, 4, 5]); // function sum() 调用函数 f 时,才真正计算求和的结果: 1 / 7 f(); // 15 在这个例子中,我们在函数 lazy_sum 中又定义了函数 sum ,并且,内部函数sum 可以引用外部函数 lazy_sum 的参 数和局部变量,当 lazy_sum 返回函数 sum 时,相关参数和变量都保存在返回的函数中,这种称为 “闭包(Closure )”的 程序结构拥有极大的威力。 请再注意一点,当我们调用 lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数: var f1 = lazy_sum([1, 2, 3, 4, 5]); var f2 = lazy_sum([1, 2, 3, 4, 5]); f1 === f2; // false f1()和 f2()的调用结果互不影响。 闭包 注意到返回的函数在其定义内部引用了局部变量 arr ,所以,当一个函数返回了一个函数后,其内部的局部变量还被新 函数引用,所以,闭包用起来简单,实现起来可不容易。 另一个需要注意的问题是,返回的函数并没有立刻执行,而是直到调用了 f()才执行。我们来看一个例子: function count() { var arr = []; for (var i=1; i=3; i++) { arr.push(function () { return i * i; }); } return arr; } 2 / 7 var results = count(); var f1 = results[0]; var f2 = results[1]; var f3 = results[2]; 在上面的例子中,每次循环,都创建了一个新的函数,然后,把创建的 3 个函数都添加到一个 Array 中返回了。 你可能认为调用 f1() ,f2()和 f3()结果应该是 1 ,4 ,9 ,但实际结果是: f1(); // 16 f2(); // 16 f3(); // 16 全部都是 16 !原因就在于返回的函数引用了变量i ,但它并非立刻执行。等到3 个函数都返回时,它们所引用的变量 i 已经 变成了 4 ,因此最终结果为16。 返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。 如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论
您可能关注的文档
最近下载
- 人文关怀在护理中的应用.ppt VIP
- 仁爱科普版英语九年级上册Unit1 The Changing World大单元整体教学评一体化教学设计.docx
- 做好新形势下群众工作培训.pptx VIP
- 2025年必威体育精装版人教版七年级(初一)数学上册教学计划及进度表(新课标,新教材).docx
- 2012年九年级物理上学期教学计划.doc VIP
- 20道TCL科技集团项目经理岗位面试问题考察点及参考回答.docx VIP
- 2025年小学语文六年级阅读理解专项练习及答案.pdf VIP
- 汽车美容与保养(第4版)全套PPT课件.ppt
- 2025三年级上册道德与法治 第3课《学习有方法》(第1课时)教学课件.pptx
- 消费者行为分析与实务教学案例NO2要点.ppt VIP
文档评论(0)