01-发展史、ECMA

5大浏览器的内核

  1. IE ——-> trident
  2. Chrome —-> webkit---> blink
  3. Safari ——-> webkit
  4. Firefox ——> gecko
  5. Opera ——-> presto--->webkit--->blink

浏览器的历史与JS的诞生

  1. 1990年
    1. 蒂姆 伯纳斯 李,通过超文本分享资讯,他开发了一个叫做 world wide web,并且移植到C语言上,更名为libwww/nexus,已经可以实现允许他人浏览他编写的网站,此时可以称作真正的浏览器。
  2. 1993年
    1. 在美国伊利诺大学,NCSA组织的(马克安德森),开发了MOSIAC浏览器,这时已经可以显示图片,成为图形化浏览器
  3. 1994年
    1. 马克安德森与硅图SGI的吉姆克拉克成立了MOSIAC communication corporation,由于商标权,MOSICA的商标权属于伊利诺大学并且转给了 spy glasss公司,所以他们更名为Netscape communication corporation
    2. 也就是后来的网景公司
    3. 网景公司开发了netscape navigator流行了十年左右,直到2003年
  4. 1996年
    1. 微软公司收购spy glass
    2. 通过MOSIAC开发出IE,internet explorer 1.0
    3. 在同一年发布了IE3,与脚本_JScript_
    4. 网景公司Brendan eich在NETSCAPE NAVIGATOR,开发出来livescript。这个时候js是没有单独的引擎的,脚本的性能非常低
    5. JAVA火起来了之后,网景公司与java所有方SUN公司合作推广宣传产品,
    6. livescript更名为—–>javascript
  5. 2001年
    1. IE6 XP 诞生,JS引擎出现
  6. 2003年
    1. mozilla公司,开发了firefox -> netscape navigator
  7. 2008年
    1. google 基于 WEBKIT BLINK GEARS
    2. 开发出chrome浏览器
    3. v8引擎
    4. javascript引擎
    5. v8引擎直接翻译机器码
    6. 独立于浏览器运行
  8. 2009年
    1. 甲骨文oracle收购SUN公司,JS的所有权归于甲骨文

ECMA

  • European Computer Manufactures Association:欧洲计算机制造联合会
  • ECMA 评估、开发、认可电信、计算机标准
  • ECMA-262—> ECMAScript 脚本语言的规范

轮转时间片实现单线程的JavaScript模拟多线程

js通过轮转时间片模拟多线程,即短时间内轮流执行多个任务的片段

  1. 执行任务1,任务2

  2. 切分任务1,任务2

  3. 随机排列这些任务片段,组成队列

  4. 按照排列这些队列顺序将任务片段送进JS进程

  5. JS线程执行一个又一个的任务片段

    变量

    JS中使用var(variable)声明变量

    1
    2
    3
    var a; // 变量声明
    a = 3; // 变量赋值
    var a = 3; // 变量赋值

    命名规范

  6. 不能以数字开头

  7. 能以字母,_ $ 开头

  8. 不能使用关键字 保留字

  9. 命名要有语义化

    jS数据类型

    原始值:NumberStringBooleanundefinednull

引用类型:objectarrayfunctiondateRegExp

  1. 原始值存储在栈内存中,当声明一个变量a,赋值为1时,会在栈内存中开辟一块空间命名为a,值保存的是1

  2. 当给a再次赋值为3时,会重新开辟一块空间a,保存值变为3

  3. 原本保存1的空间并不会删除,所以js中原始值无法删除

  4. 引用类型,在栈内存中保存的是一个地址,这个地址是变量值在堆内存中的地址

  5. 所以当复制一个引用类型时,会在栈内存中复制一份引用类型的地址,两个变量存储的地址都指向的是在堆内存保存的一个值

  6. 所以这时如果通过其中一个变量修改这个引用类型,那么两个变量的值都会改变,例如

1
2
3
4
var a = [1,2,3];
var b = a;
a.push(4);
console.log(b); // [1,2,3,4]