js中string属于基本数据类型而基本数据类型的特性有一条是确定性,而字符串的大小是不固定的,那为什么还要放在基本数据类型中呢?
答:1.这是ECMA来指定的规则本身就是这样的
2.string每个浏览器的内核的实现方式不同,这里介绍的谷歌浏览器的V8实现方式:
例如我var a="hello",就会把a放在栈中,把hello放在堆中,a通过地址引用到堆的hello文件中去.
如果我要用 b=a;然后就会在栈中创建一个b然后通过地址引用到堆的hello中.
b="abc";总所周知a是不会收到b赋值的影响的,底层原理就是,将栈中的b告诉垃圾回收机制:这个b可以进行覆盖了(所谓的垃圾回收并不是将原来的数据在内存中进行清除,而是告诉他们这个地址你有使用权了,等再创建变量的时候可以覆盖这个b)
原先的那个b回收了后之前那个引用就不复存在了,b="abc"就会在栈中重新开辟一个空间为b然后在堆中开辟一个空间为abc然后给a一个abc地址让他们连接起来.
所谓的基本数据不可改变,指的是栈的内存不可改变而是将原先的进行回收然后重新创建一个新的进行指向连接.

栈与堆是互不相关

你有没有想过一个问题var a={a:1} consloe.log(a.a)为什么不会报错,你可能说对象不就是这样使用吗?那你可知道为什么能这样使用吗?我来告诉你, var a是基本数据类型他是在栈中开辟一个内存为a,然后通过地址引用到堆中(因为{}是对象需要在堆中进行存储)堆中开辟一个内存,内容是a:1,栈和堆是两块内容所以a.a是不会出现冲突的.

栈与堆的区别

作用不同:栈存放的是基本数据类型和字符串的标识符和引用数据类型的标识符.

console.time("测试1");
for(n=0;n<=99999;n++){}
console.timeEnd("测试1")
测试1: 60240.024169921875ms
这样就能计时出中间code的执行代码的时间

第二章页面构建

用户再浏览器中输入url地址后会发生什么?

  1. 输入URL
  2. 客户端:生成请求并发送服务器
  3. 服务器:收到请求后,(执行代码:可能是获取资源文件)返回相应给客户端
  4. 客户端:收到响应后:开始处理处理HTML CSS和Javascript构建页面

1.解析HTML并构建DOM节点
2.执行Javascrit代码

  1. javascript开始监控事件队列,每次处理一个事件、队列先进先出

会检查队列中队首的事件,如果不存在就继续检查,如果存在就取出事件并执行相应的事件处理器,队列中其他存在的事件就进行等待,一直到轮到他进行执行。

  1. 用户与页面元素的交互
  2. 关闭web页面

第三章函数部分