js基础回顾-找个工作向
原型链
每一个实例对象都具有一个私有属性__proto__,指向它的构造函数的原型对象prototype,该圆形对象也拥有自己的原型对象直至为null,形成链路,null不具有原型对象,作为链路最后一环
new 创建对象 object.create
new.target判断函数是不是创建对象时调用的。 创建一个空对象,原型绑定到构造函数的原型上,空对象apply一次构造函数,返回接收函数/对象
基于原型链的继承
对象可看成一个属性包,还有一条原型链,访问属性先访问对象本身,找不到再从原型链往上找,直至找到或者返回undefined,继承的函数内this指向当前对象实例。 es6中出现class extends super static constructor。类型属性权限定义在原型上
严格模式 use strict
无法意外创建全局变量,比如使用变量时写错了名字(使用lint还是babel在开发的时候也可以避免)。 无法给不可写、只读、不可扩展(Object.preventExtensions)对象属性赋值 不可删除禁删对象属性(比如原型) 属性名、参数名不可重复
作用域
局部变量,被创建时生成,函数执行完被删除,全局变量在页面关闭时删除
闭包
函数有权访问父级作用域,即使父级函数关闭(嵌套的自调用函数) 类似于使函数拥有私有属性
typeof instanceof原理
typeof不能判断具体类型,不同对象底层用二进制前三位存储类型信息,多数会直接返回object,函数funcition,可以使用object.prototype.toString查看详细分类。 instanceof原理是检测构造函数的prototype是否在实例对象的原型链上
bind call apply
bind实现,arguments取得绑定对象及传参,定义一个中转函数,定义一个返回函数(使用apply/call在上下文上面并赋予传参),中转函数原型=绑定对象原型,返回函数原型=中转函数实例 call/apply的实现,对象.fn=函数,eval执行对象.fn并传入参数,最后删除fn
柯里化
把接受多个参数的函数转化为接收最初第一个参数的函数,并返回接受剩余参数的新函数 eg:计算加减乘除,正则取数...
浮点数精度问题
js使用的IEEE 754标准的64位双精度浮点数,第一位符号位,接着11位指数决定大小,最后52位为有效数字决定精度,小数部分只支持53位二进制,但是浮点数使用二进制表达则是无穷的,因此会被截断,整数超出了安全范围过后的计算也会被截取产生错误
事件循环机制
同步环境下不断为函数开辟嵌套执行环境,直至栈溢出超出最大可用内存,在函数执行完后立即销毁该执行环境并返回上层执行环境继续执行 遇到异步代码不会等待结果返回,直接执行完当前环境代码,将异步代码加入事件队列,等待主线程闲置的时候才会从事件队列取出回调函数加入新的执行环境 ps:在node环境有特殊的地方
宏任务settimeout setinterval 微任务promise
异步回调区分宏微队列,主线程空闲时优先取微任务队列的回调执行,至空后取宏任务队列

浙公网安备 33010602011771号