十分钟让你的javascript登峰造极
javascipt被称作前端的灵魂,没法灵活运用它,你的前端就只是一具行死走肉。大多初学者能顺利度过div+css,然后倒在了js怀抱,即时跨过了这一关,也只是会用,其底层原理一概不知。小编这就带大家从最底层的原理讲起,相信看完本篇,你对js一定会有更深刻的认识。
浏览器是前端最基本的展示工具。当我们打开浏览器,电脑系统运行内存比就会给它分配一定的空间(假设100M),随着我们打开的页面越来越多,浏览器所使用的空间也就越来越多,超过分配的空间,就会出现卡顿,甚至卡死。而我们打开的每一个页面,也就是js里面的window对象,每打开一个页面,就会创建一个window对象,彼此独立互不影响。我以一个页面(也就是一个window对象为例):
示例
第一
第二
内存图
一个网页在内存中分类为三部分,栈、堆和常量池。栈里面主要定义的变量(变量内存地址);堆里面主要存DOM树,以及它们的属性,也可以理解成对象以及对象方法属性;常量池中存各种字符、数字、符号、文字等。浏览器拿到一个html文档,是从上往下,从左往右进行执行,然后依次在页面上画出来。
假如我们在js里面定义一个变量:var a = 1; 那么栈中就会分配一点内存,供存储常量池中1的内存地址。也可以把这个a当做指针来理解,它指向常量池中的1。
当我们定义一个函数时,该函数也会产生在堆中,如果再把函数赋值给一个变量,这个变量就会存函数的内存地址。需注意的是函数比较特殊,它自己也有栈和堆。函数内部创建变量就保存在自己的栈里,创建的函数也是保存在自己的堆里,外面如果想用,只有通过在window定义个全局变量,然后通过赋值(其实就是内存指向),来引用。
其实js就是用来操作DOM树,改变它的结构或者改变属性。当我们通过js改变了某DOM的属性值,或者增加删除一个DOM,就会导致整个DOM重新加载,浏览器会重新只执行文档,然后依次画出来。由于浏览器对渲染这方面技术已经很成熟,速度很快,所以你很难察觉它是重新绘制了一遍。
十分钟让你的javascript登峰造极的更多相关文章
- 十分钟理解JavaScript引擎的执行机制
关注专栏写文章 十分钟理解JavaScript引擎的执行机制 方伟景 千锋前端开发推动市场提升的学习研究者. 4 人赞同了该文章 首先,请牢记2点: JS是单线程语言 JS的Event Loop是JS ...
- 十分钟玩转 jQuery、实例大全(参考自博主索宁)
十分钟玩转 jQuery.实例大全(参考自博主索宁) 一.简介 书写规则 支持链式操作: 在变量前加"$"符号(var $variable = jQuery 对象): 注:此规定并 ...
- 【NLP】十分钟快览自然语言处理学习总结
十分钟学习自然语言处理概述 作者:白宁超 2016年9月23日00:24:12 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文 ...
- 十分钟轻松让你认识ASP.NET MVC6
这篇文章说明下如何在普通编辑器下面开发mvc6应用程序. 上篇文章: 十分钟轻松让你认识ASP.NET 5(MVC6) 首先安装mvc6的nuget包: 可以看到在project.json文件中添加了 ...
- 十分钟轻松让你认识ASP.NET 5(MVC6)
ASP.NET 5差不多快发布了.自己也学习了有两个月了.今天给没有接触asp.net 5的同学写一个简单地十分钟教程,教你认识一下asp.net 5. 1.安装kvm 首先,你需要以管理员权限打开c ...
- 十分钟了解分布式计算:Google Dataflow
介绍 Google Cloud Dataflow是一种构建.管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Flume和具有良好容错机制流处理的MillWheel.D ...
- 十分钟了解分布式计算:GraphX
GraphX原型论文 GraphX是Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collabora ...
- 快速入门:十分钟学会Python
初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...
- 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))
十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less)) 注:本文为翻译文章,因翻译水平有限,难免有缺漏不足之处,可查看原文. 我们知道写css代码是非常枯燥的 ...
随机推荐
- http Content-type对照表
http://tools.jb51.net/table/http_content_type Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定 义网络文件的类型和 ...
- 解决远程连接mysql错误1130代码的方法
命令行登陆 mysql -uroot -p 输入密码后登陆 use mysql; select host,user from user ; grant allon *.*to root i ...
- vi技巧合集
VIM 技巧 match & replace match the whole word(eg: match printf but not snprintf/fprintf)You can us ...
- 【转】tomcat7性能调优
注意:调优tomcat需要了解使用的tomcat是什么版本,随着tomcat版本发展有新参数引入,同时有旧参数废弃.本文档以tomcat7为例进行调优 一. 线程池(Thread Pool)优化 编辑 ...
- sql中binary_checksum(*)的用法
sql中binary_checksum(*)的用法(转) binary_checksum(*)可以用来检查修改过的行. 同一行在update后,该行的binary_checksum(*)就不同. 如 ...
- Ubuntu下freeradius-server的安装与mysql-server的关联
1.创建freeradius数据库 #service mysql start ... #mysql -u root -p Enter password: 456456 ... mysql> cr ...
- 怎么利用javascript删除字符串中的最后一个字符呢?
程序员就是每天在各种代码下不停的调试,世界买家网最近遇到了烦心事,是什么事情呢? 需求是一个字符串,想删除这个字符串最后一个字符,比如“1,2,3,4,5,”,删除最后一个“,”用javascript ...
- Android Design Support Library使用详解
Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...
- C#与Java在继承静态类上的区别
interface ITest { int Get(); } abstract class Test : ITest //此处会出现错误:Programe.Test不实现接口成员Program.ITe ...
- css display:inline-block 出现空格解决方案
一: 给父元素添加 display: table;(只加这一句在谷歌, safari里可以) 子元素加: display: table-cell(火狐) 两句都加完美解决 二: .nav ul{fon ...