Javascript 简介与作用域介绍_第1页
Javascript 简介与作用域介绍_第2页
Javascript 简介与作用域介绍_第3页
Javascript 简介与作用域介绍_第4页
Javascript 简介与作用域介绍_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、javascript简介简介javascriptECMAScriptDOMBOM历史历史l1994年Netspace公司发布了Navigator浏览器0.9版 ,只能浏览网页,无法和用户交互,公司急于解决交互问题。l1995年发生了一件大事,sun公司把oak语言更名为java,并且大肆宣传,Write Once, Run Anywhere,看上去很可能成为未来的主宰 。lNetspace公司心动了,决定和sun合作,经过双方研究,决定以applet形式在浏览器运行java程序,但是后来算作失败了吧l这时Brendan Eich出现了,1995年4月入职Netspace ,当时Netspace

2、让他研究Scheme 语言在浏览器运行的可能性。所以他学写了Scheme。一个月之后,也就是1995年5月,公司做出决策,因为当时Netspace公司大多数人都是java粉丝,所以规定未来的脚本语言必须看上去和java足够类似,还得简单,所以要开发一个简化版的java语言。不要 Scheme了 。因为对java的崇拜, 所以Netspace取名为JavaScript l但是Brendan Eich对java没有太多兴趣,为了应付公司安排,他用10天就把这个搞定了。虽然有些不严谨,甚至混乱。至此javascript诞生。l2005年Brendan Eich进入mozilla .l1996年 Ne

3、tspace公司决定将javascript提交给国际标准化组织ECMA,希望javascript 能够成为国际标准,ECMA设立第39号技术专家委员会,简称T39,负责定制ECMAScript标准,成员包括Microsoft、Mozilla、Google等大公司 lECMAScript标准一开始就是针对javascript定制,但是之所以不叫javascript,有两个原因。一是javascript也已经被Netspace公司注册了。第二个想体现这个语言的定制者是ECMA,而不是Netspace。l当初的这个决定可以说目前来看非常正确,时至今日,ECMAScript,已经完全不局限于javas

4、criptl1997年ECMA发布262号标准文件第一版,规定了ECMAScript的标准,此为ECMAScript1.0l1998年6月ECMAScript2.0l1999年12月ECMAScript3.0,3.0是一个成功的版本,得到广泛支持,成为通用标准,目前我们使用的大多数功能都是3.0版本规划的l2000年 4.0版本开始酝酿,但是由于很多设计被认为过于“激进”,很多成员不愿意接受,导致最终没有通过。l4.0版本在2000年搁置之后,时隔7年,2007年10月 4.0版本草案发布,并且计划2008年8月份,也就是29届奥林匹克运动会举办月,发布正式版,但是各方对于该标准分歧仍然严重,

5、Yahoo、Microsoft、Google等大公司,反对进行大幅升级,主张小幅改动;以JavaScript创造者Brendan Eich为首的Mozilla公司,则坚持当前的草案。l2008年7月,各方人马仍然争执不下,最终ECMA开会决定终止4.0开发,将其中涉及到的现有功能改进的一小部分,发布为3.1版本,而其他的“激进”的设想,放入以后的版本,据报道当时会场气氛格外紧张,所以该版本的项目代号起名为Harmony(和谐) ,但是会后不久,3.1版本就改名为5.0版本。原4.0版本的一些可行的设想后来演变成ECMAScript6,一些不是很成熟的设想,继续被后推。T39的想法是5.0版本在

6、2013年成为主流标准,并且5年内要保持这个地位。 l2009年12月 5.0版本 正式版发布l2011年6月 5.1版本发布l2015年6月 ECMAScript 6正式通过,ECMA6 继承了很多4.0搁置的设想。如果从2000年算,已经过去整整15年。正式名称为ECMAScript 2015,计划以后所有版本以年份命名,但是大家仍习惯于称其为 ES6javascriptl1.语法,内置对象,语言结构规范可以查看ECMAScript文档,本次也是主要介绍ECAMScript部分内容,不与任何环境相关。l2.浏览器开发,例如事件、文档操作可以查看w3c的相关规范,例如w3c的dom规范规定了

7、如何操作html结构,浏览器应该依据该规范实现ECMAScript语法(言)操作dom的接口。l我们总说的IE浏览器不遵守规范,大多数指的就是这个dom规范,而不是ECMAScript规范。l3.浏览器本身属性,bom,暂时没有统一规范,但是这个浏览器的开发文档一般都会有说明。ECMAScript 简介简介l什么是ECMAScript?ECMAScript是一个语言规范,只是一个规范而已,规范不涉及任何现实的语言环境。描述的时候最多使用的也就是伪代码 。规范只是告诉我了我们怎么写代码,以及支撑该语言运转的基本内置对象都有哪些属性和方法,以及各个对象的原型对象都有哪些属性和方法,以及这些方法和属

8、性在使用的时候可以达到哪些效果。至于怎么实现这些效果,怎么实现这些对象,怎么实现这些方法,怎么解析这些语法,那是实现自己的事情,规范不会考虑。ECMAScript 简介简介lECMAScript不止服务于javascript 还有很多例如actionscript,服务器端的脚本语言,都可以使用ECMAScript,所以说ECMAScript 很简单,但是功能很强大,因为他要做什么事情,主要看解释器,“强大的调用本地化功能”,这是我的一个理解。ECMAScript 例子例子上述代码在大多数浏览器中会出现脚本问题,但是在某些环境下不会出现问题可以正常执行。为什么为什么l为什么会出现这样的情况?这就

9、是解释了原因,规范规定了,Function prototype 对象是一个 function 对象,当这个函数执行的时候,可以接受任何的参数,并且返回undefined,但规范里面并没有说明,这个函数是不是一个构造器,所以各家的实现有所差距不足为奇了,目前大多数浏览器都是报错。我想这个问题,ECMA 肯定知道,但也是无所谓的态度,不认为是什么缺陷。为什么为什么l当然上面的问题还有几个疑问之处l1.typeof 是做什么的?l2.什么样的function可以new ?ECMAScript 内置属性简介内置属性简介规范为每个对象都定义了一些内置的属性,其中有些内置属性是所有对象都有的有些属性是部分

10、对象才有的,这些内置对象一般不提供给外接访问,只作为语言实现之用。Function() 这种建立的函数,既是构造器也是调用函数所以我们可以知道,Ftotype 可以不可以new 是由什么决定的ECMAScript 内置属性简介内置属性简介lClass除非有特殊说明,否则都按照下面的规定执行,built in object ,如果有Call内部属性 则 Class就是 “Function”,如果没有Call内部属性 则 Class就是 “Object”这也就是解释了 Ftotype 的Class属性是 FunctionECMAScript typeof

11、至此我们可以完全理解了这个问题的本质部分谈谈作用域谈谈作用域这就是作用域的作用,同样涉及到性能的问题为什么要谈作用域?认识作用域认识作用域l上次我介绍了一下原型链,如果说原型链是对象寻找属性的过程,那么作用域链,就是作用域寻找”变量“的过程l作用域在我们使用过程中很好理解,函数内可以使用上级函数的变量关于变量要说的事关于变量要说的事l我们都知道。通过对象定义属性,通过var 关键字来定义变量l上次原型链中我说过这个问题,在全局上下文中foo=“hello world”;var foo=“hello world”;以往包括现在,很多人不明白这两种写法的区别,因为他们在使用上没有区别,但是他们确实

12、是不同的,前者是在全局对象上定义了一个foo的属性,后者是在全局作用域中定义了foo 变量,如果我们在这两条语句前面使用Console.log(foo);就会发现前者会出错,后者不会。认识作用域认识作用域lECMAScript 在执行过程中,进入每个function环境,会为每个function创建属于自己的作用域。并且会创建一个上下文对象用来保存可以在该作用域使用的所有”变量“。也就是说,一个function 作用域中可见的”变量“,都是在上下文中,上下文中有你就可以用,没有你就别用。认识作用域认识作用域l上下文环境对象其中VO对象存放着,参数信息和在funtion定义的”变量信息”上述代码

13、,理论上创建了4 个作用域:全局作用域Function a 作用域Function b作用域Function c作用域Global_parent_.a_parent_.b_parent_.c_parent_.Global VO_parent_Args,aa VO_parent_Args,aa,bb VO_parent_Args,bb,cb VO_parent_Args,cc与原型链的不同与原型链的不同原型链作用域链objpropobj._prototype_propobj._prototype_ ._prototype_.propfunctionvarVOFather VOFather fatherVO.我们可以发现,原型链是一个从“叶子”向“根部”取值的过程,在生产环境中,我们并不了解有多少层。有点类似于“向上委派”本身找不到就委派给上一级,至于上一级怎么找和自己没关系的但是在作用域链中,由于执行体制的原因我们知道有多少层级,这个寻找过程是本身自己控制的1234对上次分享的一点说明对上次分享的一点说明lOtotype = new Object();l上次分享的图里面,有这样的标识,这样的写法不是严谨的, Ototype是一个对象,在ECMAScript中也仅仅是一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论