客户端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. 今天在学习NTP时发现了2个网站

    NTP 调整系统时间 一个网站是:http://chrony.tuxfamily.org/doc/1.31/manual.html  这个是专门介绍chrony的,做的很详细. 另外一个是:http: ...

  2. 2.1WebApi的路由

    这篇文章描述 ASP.NET Web API如何将 HTTP 请求通过路由去访问控制器. 如果你熟悉 ASP.NET MVC,Web API 路由是非常类似于 MVC 路由.主要的区别是 Web AP ...

  3. HDU 4946 Area of Mushroom(构造凸包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4946 题目大意:在一个平面上有n个点p1,p2,p3,p4....pn,每个点可以以v的速度在平面上移 ...

  4. ACM-ICPC代码模板

    是不是感觉手中的模板都各有缺陷? 要找到好的模板就要集百家之所长, 我在这里贡献出我的代码模板丰富大家的积累. 我的模板能较好的与常见的模板形成互补. 赶快收藏吧,否则以后找不到就不好啦! 另外,想成 ...

  5. 【转】Android中的事件分发和处理

    原文链接:http://www.apkbus.com/home.php?mod=space&uid=705730&do=blog&id=61207 上次跟大家分享了一下自定义V ...

  6. [python面向对象]--基础篇

    1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() ...

  7. Android开发之---Activity启动模式

    在Android开发中,启动一个新的activity我们可以使用startActivity或startActivityForResult,Android系统使用栈的方式来管理一个APP的页面显示与保存 ...

  8. HTML开源框架

    swiper  http://www.swiper.com.cn/ frawework7 http://framework7.cn/

  9. CentOS7—HAProxy安装与配置

    概述 Haproxy下载地址:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/ 关闭SElinux.配置防火墙 1.vi /etc/selinux/co ...

  10. oracle11g RAC1执行脚本结果

    [root@testdb11a ~]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInvento ...