发展史,编程语言,ECMA,JS相关,变量,值
一、发展史
1.1 五大浏览器及内核
- IE:trident
- chrome: webkit->blink
- safari: webkit
- firefox: gecko
- opera: presto ->blink
二、编程语言
2.1编译型
源码 ->经过编译器->机器语言->可执行的文件
2.2解释型语言
源码 ->经过解释器->解释一行就执行一行
2.3脚本语言
脚本语言,一定有脚本引擎,通过解释器来解释执行。
- 前端:JavaScript,客户端脚本
- 后端:php,服务端脚本
三、JavaScript 与 ECMAScript 的关系
JavaScript包括:
- ECMAScript:由ECMA-262定义并提供核心功能。
- DOM:提供与网页内容交互的方法和接口。
- BOM:提供与浏览器交互的方法和接口。
ECMAScript 只用来标准化 JavaScript 这种语言的基本语法结构。给js的使用定义一个标准
与部署环境相关的标准都由其他标准规定,比如 DOM 的标准就是由 W3C组织(World Wide Web Consortium)制定的。
而BOM没有规范,所以我们需要对不同的浏览器进行兼容性写法。
四、JS相关
4.1单线程
Js引擎是单线程:自上而下依次执行任务。
系统同时执行不同的任务,例如不同的浏览器页面可以同时显示。原因:
轮转时间片:短时间之内轮流执行多个任务的片段(人肉眼感知不到,以为是同时执行任务)
简单过程:
- 任务1、2、3
- 切分这些任务
- 随机排列这些任务片段,组成队列
- 按照队列顺序将任务片段送到js进程
- Js线程执行一个又一个任务片段
chrome浏览器的Js引擎叫V8引擎,牛的地方:直接翻译机器码,独立于浏览器运行。
4.2 JS代码引用
引入外部文件:
<script type="text/javascript" src="xxx/xx.js"></script>
也可以在
企业中应用,故意写错type就不会执行,通过id获取html模板再处理。
<script type="text/tpl" id="tpl" >
<div class="box">{{name}}</div>
</script>
五、变量
5.1 js语言命名规范
编程语言4个要素:变量,数据结构,函数,运算能力。
//var -> variable,一个var可以声明多个变量
var x = 1,
y = 2;
命名规范:
- 不能以数字开头
- 字母,下划线,$开头
- 不许使用关键字和保留字,(关键字:标识语句的开头或结尾,保留字:未来可能成为关键字)
- 变量名命名:小驼峰isName。构造函数:大驼峰Person
六、JavaScript的值
6.1 Js引擎通过值来判断(识别)数据类型
数据类型:
-
原始值
Number,js语言的底层根本没有整数,所有的数字都是小数。
1 === 1.0 //ture
String,单引号或双引号括起来的单个字符或多个字符。
Boolean,true/false(非真即假)
undefined
null,null代表空值,使用的位置:初始化组件,函数,销毁函数,占位符
-
引用值
Object array function date RegExp(正则)
6.2栈内存和堆内存
原始值存在栈内存中,引用值的地址存在栈内存中,引用值存储在堆内存中。
-
原始值存储:
var a = 1; a = 3;
第一步变量声明赋值时,在栈内存中寻找一块空间,声明为a,内容为1;第二步变量重新赋值时,在栈内存中重新寻找一块空间,声明为a,内容为3。之前的空间仍然放着数据(原始值不可改,永久保存),等着被覆盖或者其他处理。
-
引用值存储:
var arr1 = [1,2,3,4]; var arr2 = arr1; arr1.push(5); console.log(arr1+'|'+arr2) //1,2,3,4,5|1,2,3,4,5 arr1 = [1,2] console.log(arr1+'|'+arr2) //1,2|1,2,3,4,5
数据存储过程:
-
arr1变量声明赋值时,因为值是引用类型的,在堆内存中寻找一块空间存储值,在栈内存中寻找一块空间存储值的地址,也就是说通过栈内存中的地址就可以访问到堆内存中的数据。
-
是在栈内存寻找一块内存,声明为arr2,其中存储着arr1的堆内存地址。两个变量指向同一个数据。
-
给arr1重新赋值时,在堆中寻找新空间存放新数据,在栈中重新开辟一块空间存放新数据的地址。
-
总结:无论是原始值还是引用值,在重新赋值时,都会在栈中重新寻找一块内存空间存储相应的数据。