JS中的闭包

闭包时是指内层的函数可以引用存在与包围他的函数内的变量,即使外层的函数的执行已经终止。功能不是一般的强大和复杂啊。
了解闭包必须首先了解变量的作用域:全局变量和局部变量(可以查看https://www.html.cn/article.asp?id=468)

闭包使代码更清晰,我们看一个离职:

?

XML/HTML代码
  1. <!DOCTYPE?html?PUBLIC?”-//W3C//DTD?XHTML?1.0?Transitional//EN”?”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>??
  2. <html?xmlns=“http://www.w3.org/1999/xhtml”>??
  3. ????<head>??
  4. ????????<meta?http-equiv=“Content-Type”?content=“text/html;?charset=utf-8”?/>??
  5. ????????<title>Untitled?Document</title>??
  6. ????</head>??
  7. ????<body>??
  8. ????????<div?id=“main”>我的闭包测试!</div>??
  9. ????????<script?type=“text/javascript”>??
  10. var?obj=document.getElementById(“main”); ??
  11. obj.style.border=“1px?#cdcdcd?solid”; ??
  12. setTimeout(function(){ ??
  13. ????obj.style.border=“1px?#ff0000?solid”; ??
  14. },4000); ??
  15. function?alertMsg(msg,time){ ??
  16. ????setTimeout(function(){ ??
  17. ????????alert(msg);//这个参数msg就是引用了alertMsg(msg,time)中的参数msg ??
  18. ????},time); ??
  19. } ??
  20. alertMsg(“我是css88.com站长:”,2000); ??
  21. ????????</script>??
  22. ????</body>??
  23. </html>??

用个闭包实现函数的Curry化,例子:
?

JavaScript代码
  1. function?addNum(num){ ??
  2. ????return?function(toAdd){ ??
  3. ????????return?num+toAdd; ??
  4. ????}; ??
  5. } ??
  6. var?addFive=addNum(5); ??
  7. alert(addFive(5));??

使用匿名函数来隐藏全局作用域变量的例子:

?

JavaScript代码
  1. (function(){ ??
  2. ????var?msg=“my?name?is?feiwen.”; ??
  3. ????window.onload?=?setTimeout(function(){ ??
  4. ????????alert(msg); ??
  5. ????},3000); ??
  6. })();??

使用匿名函数来激发创建多个使用闭包的函数所需的作用域

?

JavaScript代码
  1. var?obj=document.getElementById(“main”); ??
  2. var?items=[“click”,“keypress”]; ??
  3. for(var?i=0;i<items.length;?i++){ ??
  4. ????(function(){ ??
  5. ????????var?item=items[i]; ??
  6. ????????obj[“on”+item]=function(){ ??
  7. ????????????alert(“what?is?you?doing:”+item); ??
  8. ????????} ??
  9. ????})(); ??
  10. }??
赞(0) 打赏
未经允许不得转载:WEB前端开发 » JS中的闭包

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

前端开发相关广告投放 更专业 更精准

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏