客户端JavaScript程序有四部分:内联脚本、HTML事件处理程序、URL中的JavaScript、外联脚本;所有这些单独的代码共用同一个全局Window对象,它们可以看到相同的Document对象,且共享相同的全局函数和变量的集合:如果在一个脚本定义了新的全局属性,那么这个属性在脚本执行后对任意代码可见;(<iframe>内嵌的窗体有不同的全局对象);

        客户端JavaScript程序执行分两个阶段:1、载入文档内容,当HTML解析器遇到<script>标签时,默认必须先执行脚本(除非指定延迟执行defer、异步执行async),然后在进行文档的解析和渲染,注册事件处理程序;2、当文档载入完成,且所有脚本执行完毕,进入第二阶段,由事件驱动的异步执行阶段,这个阶段的第一个事件是load事件,指示文档已经载入完成并可以操作,load事件会触发onload事件;
          核心JavaScript和客户端JavaScript都有一个单线程执行模型,脚本、事件处理程序在同一时间只能执行一个,没有并发性;参考HTML5的WebWorker可并发执行;
        当浏览器遇到<script>标签时,先判断type属性是否可识别,之后按type属性指定的脚步语言来运行代码,若无法识别类型,则浏览器仅解析<script>标签,忽略其他所有属性,标签内的内容也不显示和执行,这意味着可以在<script>标签内部嵌入任意的文本数据到文档里,然后把它当做普通标签来读取text内容;
        当<script>标签使用src属性时,将下载并使用src指定的文件,即使type类型可识别,标签内的内容也将被忽略;可在标签内嵌入一些文本信息;
defer、async异步加载执行脚本:
        <script defer src='test.js'></script>指定延迟执行defer,表示解析文档和脚本下载可同时进行,但脚本的执行要在文档载入和解析完成并可以操作后,并在DOMContentLoaded 事件触发之前完成。多个defer延迟脚本按照加载顺序先后执行;
        <script async src='test.js'></script>指定异步执行async,表示解析文档和脚本下载可同时进行,但在脚本加载完成后先立即执行脚本,脚本执行完毕后再继续解析文档,执行顺序是先加载完毕先执行;
        从实用角度来说呢,首先把所有脚本都丢到 </body> 之前是最佳实践,因为对于旧浏览器来说这是唯一的优化选择,此法可保证非脚本的其他一切元素能够以最快的速度得到加载和解析;
        可以在不支持async属性时通过动态创建<script>标签并把它插入到文档中来实现异步加载和执行src属性指定的脚本。
URL中的JavaScript:
        在URL后面跟一个JavaScript:协议限定符,指定URL内容为任意的会被JavaScript解释器运行的代码的字符串,它被当做单独的一行代码对待,语句之间分号隔开,代码执行的返回值将成为该URL的‘资源’,该资源将作为内容显示在新文档中,旧文档将被替换,可用void运算符让返回值为undefined,防止旧文档被替换,如:<a href="javascript:void window.open('about:blank');">打开</a>
事件处理程序
        HTML中定义的事件处理程序的属性可以包含任意多条JavaScript语句,之间用逗号隔开,注释必须使用多行注释/* */,这些语句组成一个函数体,然后这个函数作为属性的值;
        响应一个事件需要:1、事件处理函数(事件监听器、回调函数);2、注册这个函数,以在事件发生时调用它,可通过HTML属性完成注册,但不建议将代码和HTML混在一起,提倡分离,最简单的注册方法是将事件处理函数赋值给目标对象的属性;如:(代码里没有任何函数调用,事件触发是自动调用)
        window.onload = function(){...};  document.getElementById('btn1').onclick=function(){...};
        “冒泡”:有些事件的目标对象是文档元素,该元素没有处理事件,则事件将会在文档树里往上传递,这个过程就叫冒泡

客户端JavaScript-如何执行的更多相关文章

  1. 浅谈个人对客户端JavaScript同步、异步、执行顺序等概念的理解

    一.同步和异步的概念. 同步:即按代码的顺序执行任务. 在下列代码中,按照同步概念,则是先打印1后打印2. console.log(1); console.log(2); 异步:即执行一个任务的同时执 ...

  2. 【JavaScript权威指南(第五版)】笔记之第二部分 客户端JavaScript 第13章~第23章

    第十三章 Web浏览器中的javascript ①   eg:下面两行代码实际上执行的是相同的功能 var answer = 42; window.answer = 42;   ③每个window对象 ...

  3. JavaScript 客户端JavaScript之脚本化HTTP(通过XMLHttpRequest)

    XMLHttpRequest对象的设计目的是为了处理由普通文本或XML组成的响应:但是,一个响应也可能是另外一种类型,如果用户代理(UA)支持这种内容类型的话.   大多数浏览的客户端JavaScri ...

  4. JavaScript 客户端JavaScript之事件(DOM API 提供模块之一)

    具有交互性的JavaScript程序使用的是事件驱动的程序设计模型.   目前使用的有3种完全不同的不兼容的事件处理模型. 1.原始事件模型 (一种简单的事件处理模式) 一般把它看作0级DOM API ...

  5. JavaScript 客户端JavaScript之 Web浏览器的环境

    Web浏览器实现的Javascript,通过Web浏览器实现的JavaScript引入了大量可脚本化的对象(1.Web浏览器 2.HTML 3.HTML中的内容)  Web浏览器中的Javascrip ...

  6. JavaScript 客户端JavaScript之 脚本化浏览器窗口

    1.计时器 客户端Javascript以全局函数setTimeOut().clearTimeOut().setInterval().clearInterval()提供这一功能.   前者是从运行的那一 ...

  7. JavaScript 客户端JavaScript之 脚本化文档

    客户端JavaScript的存在把静态HTML转变为交互式的Web应用程序,脚本化Web页面的内容正是JavaScript存在的理由.   一个文档对象模型或者说DOM就是一个API,它定义了如何访问 ...

  8. 前端--关于客户端javascript

    浏览器中的Javascript 客户端javascript就是运行在浏览器中的javascript,现代的浏览器已经有了很好的发展,虽然它是一个应用程序,但完全可以把它看作是一个简易的操作系统,因为像 ...

  9. javaScript代码执行顺序

    javaScript是一种描述型脚本语言,由浏览器进行动态的解析和执行. 页面加载过程中,浏览器会对页面上载入的每个js代码块进行扫描. JavaScript是一段一段的分析执行的,在分析执行同一段代 ...

随机推荐

  1. Go - 函数/方法 的 变参

    变参 本质上就是一个切片.只能接收一个或多个同类型参数,且 必须放在参数列表的 尾部. func test(s string, a ...int) { fmt.Printf("%T, %v\ ...

  2. LwIP移植和使用

    LwIP移植和使用 本手册基于lwip-1.4.x编写,本人没有移植过1.4.0之前的版本,更早的版本或许有差别.如果看官发现问题欢迎联系<QQ: 937431539  email: 93743 ...

  3. 1.reset.css的设置

    /* reset css */ *, ::before, ::after{ /*选择所有的标签 */ margin: 0; padding: 0; /*清除移动端默认的 点击高亮效果*/ -webki ...

  4. mysql开启远程连接

    修改my.ini 去掉 bind-address 127.0.0.1 或添加 bind-address 0.0.0.0 mysql -u root -p 进入mysql,执行 '; 然后 flush ...

  5. ecshop商品子分类点击下拉,子分类空时,直接跳转功能

    模板文件循环读取商品分类,并给大分类加上url属性.然后在js中判断是否有下级分类.有分类则点击下拉效果,没有子分类则跳转到url属性的链接去. themes/**/library/category_ ...

  6. java中的集合

    集合比数组的优势: 1.集合可以存任意类型的变量,长度是可变的 2.数组只能存同一类型的变量,长度是固定的 3.集合中只能存对象 List集合 : 接口  提供公有的方法 特有的方法: 1.List中 ...

  7. 解决java.io.IOException: HTTPS hostname wrong: should be

    原因:当访问HTTPS的网址.您可能已经安装了服务器证书到您的JRE的keystore .但这个错误是指服务器的名称与证书实际域名不相等.这通常发生在你使用的是非标准网上签发的证书. 解决方法:让JR ...

  8. (转)Tomcat7+Redis存储Session

    原创http://blog.csdn.net/caiwenfeng_for_23/article/details/45666831 PS:截止到2015-05-12前是不支持Tomcat8的,详情见官 ...

  9. python常见数据类型

    字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串烦人过程其实很简单,只需为变量分配一个值即可.例如: var = 'Hello Wor ...

  10. Git版本控制管理学习笔记2--起步

    首先确保系统中已经安装了git,这里使用的linux系统. 一.命令行初步使用: 1.git命令: 列出它的选项和最常用的子命令.标准命令格式中,COMMAND代表的就是下面列出的子命令. [root ...