原型与原型链
构造函数、原型、原型链关系图:
使用es5中 var
命令声明的变量可以在 window
下找到,比如:
var myName = 'mason'
,可以使用 window.myName
访问到。
但是使用es6的 let
和 const
声明的变量却没有在window下,这是为什么呢?
防抖和节流的目的都是希望一段时间内不要密集调用callback。
应用场景:滚动(防抖),搜索(节流)
js 有自动垃圾回收机制(GC),GC 会周期性的清理不使用的变量所占用的内存空间。 不同浏览器的 GC 机制都不同,不同环境的 GC 机制也不同。
js无法直接比较一个对象是否为空( obj === {}
永远为 false
),原因是js在对比两者时是比对的两者的内存地址,而 {}
放在js引擎新分配的内存地址中,故而两者永远不相等。
遇到了laydate无法正确渲染的问题。
js对象有两种属性:
如果对象内只声明了get,则get/set属性值只可读。
如果对象内只声明了set,则get/set属性值只可写且值永远为 undefined
。
js判断两个对象是否相同(两个对象拥有相同的key和value就视为相同)。
此方法可以兼容key顺序不一致的情况。
JavaScript是单线程语言,JavaScript中的任务分为同步任务(sync task)和异步任务(async task)。遇到执行函数会将其放入调用栈(先进后出)中,遇到setTimeout/setInterval等异步任务时,会把它放入到消息队列中,等主线程的任务执行完成以后,再回过头执行消息队列中的异步任务,如果异步任务中仍然有异步任务,会继续放入消息队列,以此类推,便形成了一个事件循环。
同步任务:在主线程上排队。
异步任务:在任务队列中排队,等待通知进入主线程执行。