一、发展史,编程语言,ECMA,JS相关,变量,值

发展史,编程语言,ECMA,JS相关,变量,值

一、发展史

1.1 五大浏览器及内核

  1. IE:trident
  2. chrome: webkit->blink
  3. safari: webkit
  4. firefox: gecko
  5. 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. 任务1、2、3
  2. 切分这些任务
  3. 随机排列这些任务片段,组成队列
  4. 按照队列顺序将任务片段送到js进程
  5. 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;

命名规范:

  1. 不能以数字开头
  2. 字母,下划线,$开头
  3. 不许使用关键字和保留字,(关键字:标识语句的开头或结尾,保留字:未来可能成为关键字)
  4. 变量名命名:小驼峰isName。构造函数:大驼峰Person

六、JavaScript的值

6.1 Js引擎通过值来判断(识别)数据类型

数据类型:

  1. 原始值

    Number,js语言的底层根本没有整数,所有的数字都是小数。

    1 === 1.0 //ture
    

    String,单引号或双引号括起来的单个字符或多个字符。

    Boolean,true/false(非真即假)

    undefined

    null,null代表空值,使用的位置:初始化组件,函数,销毁函数,占位符

  2. 引用值

    Object array function date RegExp(正则)

6.2栈内存和堆内存

原始值存在栈内存中,引用值的地址存在栈内存中,引用值存储在堆内存中。

  1. 原始值存储:

    var a = 1;
        a = 3;
    

    第一步变量声明赋值时,在栈内存中寻找一块空间,声明为a,内容为1;第二步变量重新赋值时,在栈内存中重新寻找一块空间,声明为a,内容为3。之前的空间仍然放着数据(原始值不可改,永久保存),等着被覆盖或者其他处理。

  2. 引用值存储:

    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
    

    数据存储过程:

    1. arr1变量声明赋值时,因为值是引用类型的,在堆内存中寻找一块空间存储值,在栈内存中寻找一块空间存储值的地址,也就是说通过栈内存中的地址就可以访问到堆内存中的数据。

    2. 是在栈内存寻找一块内存,声明为arr2,其中存储着arr1的堆内存地址。两个变量指向同一个数据。
      在这里插入图片描述

    3. 给arr1重新赋值时,在堆中寻找新空间存放新数据,在栈中重新开辟一块空间存放新数据的地址。

在这里插入图片描述
请添加图片描述

总结:无论是原始值还是引用值,在重新赋值时,都会在栈中重新寻找一块内存空间存储相应的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值