这一篇是根据不同的书本知识归纳的内容,解答的问题是浏览器是如何工作的

另外,还有一些长篇的内容,写的是浏览器内部如何架构的,这些内容非常复杂艰深,比现在所写的内容又低了一个层级,希望有时间能总结贴出来。

一、打开浏览器窗口,产生window对象。

打开网页,首先弹出一个窗口,也就是window对象。这个对象是浏览器自动创建出来的。

根据JS的知识,任何一个对象都有属性和方法,属性又可以分为各种样式,比如数值number,字符串string,甚至属性也是一个对象,这样层层嵌套。那么,如何知道这个window对象到底有多少个属性和多少个方法呢?

代码如下:

<script type="text/javascript">
for(var key in window)
{
document.write(key+"->"+typeof(window[key])+"<br>");
}
</script>
//生成结果如下:
top->object
location->object
document->object
window->object
external->object
chrome->object
key->string
speechSynthesis->object
caches->object
....

可以看到window有非常多的属性和方法(function),同时,这个window对象也是JS运行的全局对象和全局作用域对象。这个怎么理解呢?

代码示例:

<script type="text/javascript">
var a=10; //定义一个变量
function f() //定义一个函数
{
alert("ok");
}
var _object={};//定义一个对象
document.write(a);
//或document.write(window.a);
f();
//或:window.f();
</script>

代段说明一个问题:无论创建的是什么,都是window对象之下,可以用window.的形式引用,只因为是全局的,所以会把window前缀省略掉。

二、文档对象document

文档对象document,从外观上看就是加载网页的地方,这和window有点区别。但不管怎样,document对象却是window对象的一个属性,通过遍历window对象可以看到。

归结来说:

window对象下有很多属性,属性也可以是一个对象,而document对象是window对象的一个属性。

正如上文所说,window对象是全局的,因此window可以省略。

完整的写法可以是这样:

window.document.write("ok");

省略后可以写成:

document.write("ok");

这样,就搞清楚了到底谁是谁的问题,一个东西到底是从哪里来的问题。

根据上面遍历window对象的方法,我们同样可以追察document对象到底有多少个属性和方法。

<script type="text/javascript">
for(var key in window.document)
{
document.write(key+"->"+typeof(window.document[key])+"<br>");
}
</script>

结果可以看到,它也有很多属性和方法。

有了这些概念,再去引用各个属性和方法,就知道是怎么回事儿。

三、文档对象模型

这一块知识,网上有很多,就不再详写。简单说就是,网页被加载之后,就生成一个个的对象,可以引用、操作,还可以动态创建

  

  

深入浅出javascript(四)网页运行原理的更多相关文章

  1. js 网页运行原理

    当我们打开一个网页的时候,浏览器会首先创建一个窗口,这个窗口就是我所知道的window对象,也就是整个Javascript运行所依附的全局变量. 为了加载网页文档,当前窗口又需要创建一个Documen ...

  2. 爬虫框架Scrapy 之(四) --- scrapy运行原理(管道)

    解析后返回可迭代对象 这个对象返回以后就会被爬虫重新接收,然后进行迭代 通过scrapy crawl budejie -o xx.josn/xx.xml/xx.csv 将迭代数据输出到json.xml ...

  3. JavaScript运行原理解析

    原文:1.http://blog.csdn.net/liaodehong/article/details/50488098 2.Stack的三种含义 (阮一峰) 3. http://lib.csdn. ...

  4. 网页设计——3.html运行原理,基本标签

    一.运行原理 (1)本地运行 自己写的html网页用电脑上浏览器打开,就是实现了本地运行. 可以把浏览器当成一个软件,可以打开html文件. (2)远程访问 远程访问就是你用自己电脑在网上浏览一些网站 ...

  5. Js基础知识(四) - js运行原理与机制

    js运行机制 本章了解一下js的运行原理,了解了js的运行原理才能写出更优美的代码,提高运行效率,还能解决开发中遇到的不理解的问题. 进程与线程 进程是cpu资源分配的最小单位,进程可以包含多个线程. ...

  6. 深入浅出 Jest 框架的实现原理

    English Version | 中文版 深入浅出 Jest 框架的实现原理 https://github.com/Wscats/jest-tutorial 什么是 Jest Jest 是 Face ...

  7. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  8. jsp学习--JSP运行原理,九大隐式对象和JSP常用标签

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  9. 深入浅出 JavaScript 变量、作用域和内存 v 0.5

    本文主要从原理入手分享变量和作用域的相关知识,最后结合本文所分享知识,再次深入了解下闭包的运行原理. 主要参考<JS高级程序设计> <JS权威指南> <高性能 JS> ...

随机推荐

  1. vue-router2

    六,导航钩子 导航钩子函数主要是在导航跳转的时候做一些操作,比如跳转页面之前,进行判断 进而选择跳转到哪里 钩子函数根据生效范围根据其生效范围可以分为全局钩子函数,路由独享钩子函数 和 组件钩子函数. ...

  2. Jfinal适用于条件查询的动态SQL语句生成工具

    条件查询是可能有为空字段,拼接SQL语句时候要屏蔽掉这些字段. package cn.pangpython.utils; import java.util.Iterator; import java. ...

  3. jsp获取ip使用request.getRemoteAddr返回0:0:0:0:0:0:0:1

    JAVA Web开发过程中,很多场景下需要获取访问终端的IP,对应方法getRemoteAddr.例如调试过程中本地回环ip地址是127.0.0.1,忽然有一天返回 0:0:0:0:0:0:0:1,这 ...

  4. 10.17JS日记

    1.变量提升 变量提升是浏览器的一个功能,在运行js代码之前,浏览器会给js一个全局作用域,叫window, window分为两个模块,一个叫做内存模块,一个叫做运行模块,内存模块找到当前作用域下的 ...

  5. Eigen解线性方程组

    一. 矩阵分解: 矩阵分解 (decomposition, factorization)是将矩阵拆解为数个矩阵的乘积,可分为三角分解.满秩分解.QR分解.Jordan分解和SVD(奇异值)分解等,常见 ...

  6. mysql学习笔记-1.下载与安装

    1.到mysql官网下载操作系统对应的数据库,下载地址https://dev.mysql.com/downloads/mysql/ 2.有msi安装版本和zip压缩版本,2种安装方式不同, 3.安装后 ...

  7. (轉)EasyUI - DataGrid 去右边空白滚动条列

    熟悉 EasyUI - DataGrid 的童鞋应该会注意到这样一个情景: 想去掉这块,找了下资料,发现也有人同样纠结:http://www.cnblogs.com/hantianwei/p/3440 ...

  8. [Jmeter] Concurrency Thread Group

    Concurrency Thread Group : https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/ 参数介绍: Target Conc ...

  9. 利用PHP脚本辅助MySQL数据库管理5-检查异常数据

    <?php $dbi = new DbMysql; $dbi->dbh = 'mysql://root:mysql@127.0.0.1/coffeetest'; $map = array( ...

  10. 提升HTML5的性能体验系列之二 列表流畅滑动

    App的顶部一般有titlebar,下面是list.常见的一个需求是要在list滚动时,titlebar不动.这个简单的需求,实现起来其实并不简单. 在普通web上的做法是使用div的滚动条,把lis ...