客户端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. Android高手速成--第三部分 优秀项目

    主要介绍那些Android还不错的完整项目,目前包含的项目主要依据是项目有意思或项目分层规范比较好.Linux项目地址:https://github.com/torvalds/linuxAndroid ...

  2. JavaScript学习总结(二)数组和对象部分

    pt学习总结(二)数组和对象部分 2016-09-16    分类:WEB开发.编程开发.首页精华暂无人评论     来源:trigkit4 分享到:更多1 对象部分 Object类型 Object  ...

  3. c++ 类静态成员、非静态成员初始化

    1.静态成员初始化(不能在构造函数或初始化列表中初始化) 1.1 所有静态成员都可以在类定义之外初始化(通用),如下所示 class test { public: static int a; }; ; ...

  4. 在linux中减小和增大LV的过程与思考

    今天在安装oracle 11 rac的时候,查看操作系统df -lh,发现/home目录竟然分了500多G,/根目录才有50G,当时我就爆了句粗口,这TM系统是怎么做的. Filesystem     ...

  5. 不会JavaScript能混前端么?能拿到高薪么?

    不会JavaScript能混前端么?能拿到高薪么? 答案是:很难! 为什么这么说呢,理由很简单 1)有很多企业不注重前端开发,当然也就不会给你高薪了,这样的企业以小企业居多. 他们一般对前端开发的认识 ...

  6. caffe下训练时遇到的一些问题汇总

    1.报错:“db_lmdb.hpp:14] Check failed:mdb_status ==0(112 vs.0)磁盘空间不足.” 这问题是由于lmdb在windows下无法使用lmdb的库,所以 ...

  7. LeetCode之383. Ransom Note

    -------------------------------------------- 思路就是进行频率统计. 统计一下第二个字符串字符出现次数++统计一下第一个字符串中字符出现次数--如果出现负数 ...

  8. unity3d中串口的使用

    工作中遇到了串口的问题,通过查资料&实验写出了下面代码: 关于串口的代码我在网上看了好多,一种是用事件来做,另外一种使用线程来做:(经过试验,unity无法用串口自带的事件进行数据读取): 看 ...

  9. C++中动态内粗分配new标识符的使用

    new是C++中内建的操作符,具体用法见下面详解: (1)new用法一:基本数据类型的内存动态分配 int *p; p=new int(10): 在这个例子中首先定义个一个指向整型类型的指针,紧接着用 ...

  10. 《利用Python进行数据分析: Python for Data Analysis 》学习随笔

    NoteBook of <Data Analysis with Python> 3.IPython基础 Tab自动补齐 变量名 变量方法 路径 解释 ?解释, ??显示函数源码 ?搜索命名 ...