从语言层面认知JS

语言提供的抽象或简化级别

  • 机器码(0-1)

  • 汇编语言 - 汇编器, 先编译

  • 高级语言 - 编译器 - c、 c++

  • 更高级 - js - js引擎(V8/SpiderMonkey) - 性能损失

  • v8引擎

  • 动态类型和弱类型 - 隐式解析

    • 动态类型:运行时更改和确定;
    • 弱类型:不严格区分类型
  • 多范式 - 按照自己的方式,编写代码

    • 声明式 - 命令式
    • 函数式 - 面相对象
  • 原型继承

    • 继承
      • 将一个对象作为另一个对象的原型来复用
    • 原型链
      • 原型链查找
  • ECMAScript 只关注 JS 本身,

    • 细节由浏览器厂商解答(内存管理和gc)
  • JIT

    • js
      • 原先 解释性
      • V8,两个编译器
        • 编译器1- 通用型,编译任何js代码,编译快,输出性能一般;
        • 编译器2- 编译常用代码,编译慢,输出性能高;
        • (webassemble)
      • 编译器特点,对类型不变地编译器较好;因此,编译器2,应用有限;
  • 事件循环

    • 调用栈和堆
      • 调用栈:性能高,连续执行函数,每个函数在栈中创建一个框架,包含局部变量副本和this;
        • 调用栈上限溢出,一般是无线循环导致
      • : 存储本地之外的对象
        • 比栈慢
        • 存放未被访问或使用的对象 - 垃圾 - 垃圾回收器
    • 单线程
      • JS单线程
        • webworker,属于web api
        • nodejs, 属于nodejs运行时
    • 事件循环工作
      • 不等函数返回值,监听传入的事件,调用回调;
      • 非阻塞循环
      • 执行同步代码,检查任务队列中需要执行的异步操作;
        • 宏任务
          • 比通常的任务队列优先级低
        • 微任务
          • 比通常的任务队列优先级高

    参考

开发做了这么多年,你真的了解JS工作机制吗?

posted @ 2019-07-17 09:15  真我时刻  阅读(175)  评论(0)    收藏  举报
hello world