JS解释编译简要过程
源代码通过解析器生成AST(Abstract syntax tree),然后生成字节码(介于高级语言与机器语言之间的中间代码),再通过解释器逐行解释并执行,借助JIT(Just in time)技术监测代码执行过程,根据代码执行频率从高到低将代码标记为不同等级,低等级的通过基线编译器编译,高等级的通过优化编译器编译,之后将执行编译后的代码,而一旦优化后代码不再满足优化条件,则将其降级到基线编译器或解释器中去处理,这就是去优化;
对JS单线程非阻塞的理解
JS手撕代码
typeof
1 | // from MDN |
instanceof
1 | function instanceOf(instance, constructor) { |
new
1 | function __new(constructor, ...args: any[]) { |
Javascript常见内置对象
Object
assign(target, ...sources)
,复制sources的自有可枚举属性到target,并返回target,复制过程用的是sources的[[Get]]与target的[[Set]];create(proto, propertiesObject)
,使用指定的原型对象和自有可枚举属性创建一个新对象;defineProperty(target, propName, descriptor)
,给target添加或修改名为propName的属性,并指定属性描述符;entries(target)
返回target的自有可枚举属性的键值对数组,形如[ ['propA', '1'], ['propB', 2] ]
;
面向对象编程
Javascript进阶
什么是原型链?
定义的函数、类或对象会自动创建原型对象,并通过prototype
和constructor
互相指向对方,原型之间通过__proto__
构成原型链,实例调用某个方法时,会沿原型链寻找该方法,直到找到指定方法,或遍历完整个原型链后抛出异常;
借助单链表理解:针对实例调用某方法的角度来讲,原型链可以看作一个链表,每个节点都是原型对象,以__proto__
属性指向下一节点,头节点是实例本身,尾节点是Object.prototype
;
不同情况下的__proto__
如下:
- function 函数,箭头函数,其
__proto__
一定是Function.prototype
,包括Function
;