- 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中的作用域和上下文选编
优就业JS教程-理解JavaScript中的作用域和上下文 Java对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性。 函数可以接收不同的的上下文和作用域。这些概念为Java中的很多强大的设计模式提供了坚实的基础。 然而这也概念也非常容易给开发人员带来困惑。为此,本文将全面的剖析这些概念,并阐述不同的设计模式是如何利用它们的。 Statement 作者: 景庄,Web开发者,主要关注Java、Node.js、React、Docker等。 上下文(Context)和作用域(Scope) 首先需要知道的是,上下文和作用域是两个完全不同的概念。多年来,我发现很多开发者会混淆这两个概念(包括我自己), 错误的将两个概念混淆了。平心而论,这些年来很多术语都被混乱的使用了。 函数的每次调用都有与之紧密相关的作用域和上下文。从根本上来说,作用域是基于函数的,而上下文是基于对象的。 换句话说,作用域涉及到所被调用函数中的变量访问,并且不同的调用场景是不一样的。上下文始终是this关键字的值, 它是拥有(控制)当前所执行代码的对象的引用。 变量作用域 一个变量可以被定义在局部或者全局作用域中,这建立了在运行时(runtime)期间变量的访问性的不同作用域范围。 任何被定义的全局变量,意味着它需要在函数体的外部被声明,并且存活于整个运行时(runtime),并且在任何作用域中都可以被访问到。 在ES6之前,局部变量只能存在于函数体中,并且函数的每次调用它们都拥有不同的作用域范围。 局部变量只能在其被调用期的作用域范围内被赋值、检索、操纵。 需要注意,在ES6之前,Java不支持块级作用域,这意味着在if语句、switch语句、for循环、while循环中无法支持块级作用域。 也就是说,ES6之前的Java并不能构建类似于Java中的那样的块级作用域(变量不能在语句块外被访问到)。但是, 从ES6开始,你可以通过let关键字来定义变量,它修正了var关键字的缺点,能够让你像Java语言那样定义变量,并且支持块级作用域。看两个例子: ES6之前,我们使用var关键字定义变量: function func() { if (true) { var tmp = 123; } console.log(tmp); // 123 } 之所以能够访问,是因为var关键字声明的变量有一个变量提升的过程。而在ES6场景,推荐使用let关键字定义变量: function func() { if (true) { let tmp = 123; } console.log(tmp); // ReferenceError: tmp is not defined } 这种方式,能够避免很多错误。 什么是this上下文 上下文通常取决于函数是如何被调用的。当一个函数被作为对象中的一个方法被调用的时候,this被设置为调用该方法的对象上: var obj = { foo: function(){ alert(this === obj); } }; obj.foo(); // true 这个准则也适用于当调用函数时使用new操作符来创建对象的实例的情况下。在这种情况下,在函数的作用域内部this的值被设置为新创建的实例: function foo(){ alert(this); } new foo() // foo foo() // window 当调用一个为绑定函数时,this默认情况下是全局上下文,在浏览器中它指向window对象。需要注意的是,ES5引入了严格模式的概念, 如果启用了严格模式,此时上下文默认为undefined。 执行环境(execution context) Java是一个单线程语言,意味着同一时间只能执行一个任务。当Java解释器初始化执行代码时, 它首先默认进入全局执行环境(execution context),从此刻开始,函数的每次调用都会创建一个新的执行环境。 这里会经常引起新手的困惑,这里提到了一个新的术语——执行环境(execution context),它定义了变量或函数有权访问的其他数据,决定了它们各自的行为。 它更偏向于作用域的作用,而不是我们前面讨论的上下文(Context)。请务必仔细的区分执行环境和上下文这两个概念(注:英文容易造成混淆)。 说实话,这是个非常糟糕的命名约定,但是它是ECMA规范制定的,你还是遵守吧。 每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中(e
您可能关注的文档
- 班级行为规范的建设选编.ppt
- 班组建设专题讲座选编.ppt
- 班组建设和班组管理选编.pptx
- 班组建设例会内容选编.pptx
- 班组建设浅析选编.ppt
- 班组班前安全活动记录表选编.doc
- 班组的工作艺术(logo)--黄耀华.ppt选编.pptx
- Mysql主从与分区技术综述.ppt
- 班组管理与人员教导选编.ppt
- 班组级各工种安全教育试卷及答案选编.doc
- 《保险科技与保险业法律法规的适应与创新》教学研究课题报告.docx
- 8 《影视动画角色设计中的传统节日文化元素在角色情感表达中的应用与效果分析》教学研究课题报告.docx
- 《装配式建筑节点连接结构优化与性能提升创新研究》教学研究课题报告.docx
- 初中音乐数字化实践教学远程指导与监控体系优化研究教学研究课题报告[001].docx
- 基于国家智慧教育云平台的高中英语阅读教学创新实践探讨教学研究课题报告.docx
- 《建筑行业安全管理法规体系完善与建筑施工企业安全管理对策研究》教学研究课题报告.docx
- 2025年必威体育官网网址知识试题库及参考答案【实用】.docx
- 2025年国家网络安全知识竞赛题库及完整答案(典优).docx
- 4.9.2法律保障生活 课件(共21张PPT).pptx
- 人教版(2024)七年级下册Unit 7 A Day to Remember Section A(1a-1d)课件Section A(1a-1d).pptx
文档评论(0)