客户端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. linuxmint 17没有vim

    首先上软件管理器中安装vim,之后配置.vimrc文件 下面是从网上摘抄的配置文件: """""""""&qu ...

  2. LNMP环境搭建笔记

    说明:前面尝试的在ubuntu12.04上搭建的LAMP环境由于开发的需要需要对php的版本进行升级,然而通过apt-get库安装的php的版本是5.3.10,不能满足开发需要.此笔记安装的php的 ...

  3. PHP的ob_start()函数用法

    经典参考片段: <?php ob_start(); echo '123'; echo '456'; echo '789'; $content = ob_get_contents(); ob_en ...

  4. vi 常用命令

    1.关于退出 :wq!  ----强制保存退出 :wq  ---- 保存退出 ZZ  ---- 作用和:wq一样,(注意Z是大写的,并且不是在命令模式) :q  ---- 退出 :q!  ---  强 ...

  5. CentOS6.3 编译安装LAMP(1):准备工作

    卸载yum或rpm安装的amp软件 #在编译安装lamp之前,首先先卸载已存在的rpm包. rpm -e httpd rpm -e mysql rpm -e php yum -y remove htt ...

  6. windows vim修改字体

    C:\Program Files (x86)\Vim\vim74 目录下,在vimrc_example.vim和mswin.vim中添加: set guifont=Consolas:h11

  7. JVM参数OmitStackTraceInFastThrow:不打印NullPointerException异常堆栈

    查看线上日志,遇到一个诡异的问题,就是系统大量空指针的异常,但是没有打印堆栈,导致不方便定位问题. 经过一番代码调试,确定并非程序代码问题.没有线索之后,从Google找到了答案:是因为在server ...

  8. netty 解析http请求 post

    http://blog.csdn.net/neosmith/article/details/50383548

  9. Maven 入门 (2)—— 创建Maven项目

    http://blog.csdn.net/kakashi8841/article/details/17427043 读这篇文章之前请先确保你成功安装了maven,如果你还没安装成功,请先看:Maven ...

  10. Win10安装程序出现error code 2502 2503

    在Win10中,在安装msi安装包的时候常常会出现代码为2502.2503的错误.其实这种错误是由于安装权限不足造成的,可以这种msi的安装包不像其他exe的安装程序,在安装包上点击"右键& ...