当前位置: 首页 > news >正文

女生自己做网站王野天津音乐广播

女生自己做网站,王野天津音乐广播,成都广告公司招聘信息,WordPress附件图片弹窗闭包作为前端面试的必考题目#xff0c;常让1-3年工作经验的JavaScripter感到困惑#xff0c;其实主流语言都有闭包。今天我们深入聊一聊[闭包]#xff0c; 查缺补漏#xff01;1. 以面试题 投石问路 2. 以C#闭包 庖丁解牛 3. 跨越语言 追本溯源 • 头等函数 •… 闭包作为前端面试的必考题目常让1-3年工作经验的JavaScripter感到困惑其实主流语言都有闭包。今天我们深入聊一聊[闭包] 查缺补漏 1. 以面试题 ·  投石问路 2. 以C#闭包 ·  庖丁解牛 3.    跨越语言 ·追本溯源   •  头等函数   •自由变量   •词法作用域4.  答面试题 · 返璞归真1. 投石问路调用下面函数输出结果是什么样呢static void Closure1() {for (int i 0; i 5; i){ Task.Run(() Console.WriteLine(i));} } // 输出 5 5 5 5 5 是不是很意外如何输出原本预期的 0,1,2,3,4。bingo 加一个临时变量就可以解决。static void Closure2() {for (int i 0; i 5; i){int j i;Task.Run(() Console.WriteLine(j));} } // 输出: 3 0 1 4 2 // 多次执行的结果不一样但是总是会保持输出 0,1,2,3,4 的乱序组合 以上闭包概念涉及到 Task任务理解起来更加复杂我们来看一个基础的C#闭包。2. 庖丁解牛一个闭包就是一个“捕获”了其生成的环境中、所引用的自由变量的函数。这个被引用的自由变量将和这个函数一同存在即使已经离开了创造它的环境也不例外。 static void Closure(){var x 1;Action action () {var y 1;var result x y;Console.WriteLine(result);x;};action();action(); }// 输出:23 我们首先定义了一个委托action它引用了“x”变量x变量既不是入参也不是委托内的局部变量 这个变量将被action捕获”被自动添加到action 的运行环境。当我们执行action时原始的“x”已经脱离了它被引用时的作用域环境但是两次执行能输出2,3 说明它脱离原引用环境仍然能用。当你在代码调试器debugger里观察“action”时可以看到C#编译器为我们创建了一个Target属性里面封装了 x 变量源码追溯委托继承自Delegate抽象类Delegate类有个Target 属性(获取当前委托调用实例方法的实例类 。至此可以猜想: 我们每次执行委托实际是是执行某个匿名类上的实例方法。都说了闭包是跨越语言的设计 至少我知道 JavaScript C# Go都有闭包。3. 追本溯源闭包是词法闭包的简称维基百科上是这样定义的“在计算机编程中闭包是在词法环境中绑定自由变量的头等函数”。头等函数头等函数( First Class)意味着语言将其视为第一类数据类型的函数, 意味着你可以将函数分配给一个变量(或作为参数传递然后像正常函数一样调用。很明显C#常使用的委托C#委托的演进匿名函数--lambda表达式是头等函数。Funcstring,string myFunc delegate(string var1){return some value; }; Funcstring,string myFunc var1 some value; string myVar myFunc(something); 自由变量自由变量是在匿名函数/lambda表达式中被引用的变量它不是函数的参数也不是函数的局部变量。var myVar this is good; Funcstring,string myFunc delegate(string var1){return var1 myVar; }; 词法作用域引用的自由变量注意是引用自由变量并不是使用当时自由变量的值。☺️通俗点 就是告知这个变量环境我这个匿名函数等会执行时要用到这个变量如果我没被销毁你不能销毁我引用的自由变量。我们再回过头来看[投石问路]的面试题。4. 返璞归真首先你要知道循环内开启的Task任务并不保证执行顺序。Demo1输出5,5,5,5,5这是因为在 for循环内开启了5个Task任务每个任务均引用了自由变量i 相对于每个任务执行环境i 属于全局变量for循环先执行完i5 5个任务输出时自然得到值5。为什么加上临时变量就能输出预期Demo2输出乱序的0,1,2,3,4这是因为 在for循环内每次循环j均拷贝自当时的i每个任务均引用了自由变量 j 每个任务执行环境均维护了一个变量j任务乱序执行时依旧能获取本任务绑定的自由变量j。有这样的认知理解JavaScript 闭包也就不难了。# 总结本文屏蔽语言差异理清了[闭包]的概念核心 头等函数、自由变量不仅能帮助我们应对多语种有关闭包的面试题 也帮助我们了解[闭包]在通用语言中的设计初衷。原创不易 点个在看支持下~
http://wiki.neutronadmin.com/news/295404/

相关文章:

  • 中型网站开发语言云南模板网站建设公司
  • 网站建设最便宜在线小游戏
  • 做淘宝要用到哪些网站昆明网站制作策划
  • 昌平网站制作app开发费用标准
  • 网站建设 保定施工企业信用评价
  • 南昌门户网站建设h5 网站模板
  • 佛山营销型网站设计国外服务器网站打开慢
  • 做一个网站的价钱百度热门
  • 淮安建设企业网站国外h5网站模板下载
  • 网站建设方案书是啥比较好的网站建设品牌升级
  • 晟合建设集团网站aspnet网站开发书
  • 天津市建设交易中心网站婚纱设计网站首页
  • 新北区城乡建设局网站wordpress 头像打岔
  • 旅行社网站建设规划方案seo博客网站
  • 做app网站的软件有哪些内容医院网站建设运营方案
  • 建设局域网网站部队内网网站建设方案
  • wordpress 只有英文百度seo流量
  • 绍兴网站建设专业的公司个人网页制作总结
  • 电子商务网站规划与网页制作wap版
  • 网站安全软件宁波seo优化
  • 建立网站赚钱商城网站开发报价单
  • 苏州做物流网站电话广告
  • c2c网站方案网站怎么防k
  • 做一些网站的弹出页面做网站的公司是什么
  • 网站开发技能证书福州网签查询系统
  • 南通的网站建设广告推广赚钱
  • 青岛胶东建设国际机场网站专业网络推广平台
  • 做笔记网站网站中常用的英文字体
  • 深圳网站建设服务器玉石电商网站建设方案
  • 邢台建站mvc做的网站如何发布访问