记一下巩固 js 时碰到的一些基础知识
原型,原型链,继承
闭包
一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。
那么 高阶函数是闭包吗?
this 及箭头函数
记不住 this 到底指向谁,我用这个方法记 普通的 this:谁找我,我跟谁 箭头函数的 this:谁造我,我跟谁
面试官可能问箭头函数有什么好处:this 指向不可改变
箭头函数坏处呢?
- 箭头函数没有自己的
this
对象(详见下文)。 - 不可以当作构造函数,也就是说,不可以对箭头函数使用
new
命令,否则会抛出一个错误。 - 不可以使用
arguments
对象,该对象在函数体内不存在。如果要用,可以用rest
参数代替。 - 不可以使用
yield
命令,因此箭头函数不能用作Generator
函数。
instanceof 和 typeof
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。
typeof
操作符返回一个字符串,表示未经计算的操作数的类型。
简单举例一下好处和坏处 好处:判断值是否存在
if (typeof a === 'undefined') {
console.log('error');
}
instanceof
修改了原型之后 比较就为 false 了
typeof new 一个 String
Functiuon
类型的 会返回 Object
V8 的内存回收机制,避免内存泄露
- 尽可能少地创建全局变量
- 手动清除定时器
- 少用闭包
- 清除 DOM 引用
- 弱引用 WeakMap weakSet
call,bind,apply
{% post_link js-call-bind-apply 我的 bind,apply,call 笔记 %}
promise
js 是单线程的,所以执行方式是异步的,promise 是为了解决异步编程中的一些问题,比如回调地狱,让编程更加的直观健壮 然后它也是一个异步操作,代表的是最终的完成还是失败。但通过这样的一个方式你可以把它看成同步执行,而不会阻塞浏览器的运行。
手写 promise1 手写 promise2 手写 promise3
{% post_link js-promise 手写 promise %}
Event Loop 宏任务 微任务
笔记挺好
- https://github.com/sisterAn/JavaScript-Algorithms
- http://www.dennisgo.cn/Articles/JavaScript/Promise.html
手写
- 手写实现 promise
- 手写实现 promise.all 方法
- 用 setTimeout 和 clearTimeout 简单实现 setInterval 与 clearInterval
- 实现 sleep 函数
- 写一个 ajax
- 发送文件
- 手写简单的路由
- 数据的双向绑定
- 频率最高的单词
- 发布 - 订阅
- 红黄绿灯
- 手写一个 new
- 手写消抖节流
- 数组乱序输出
- 数组扁平化
- 柯里化
- 手写排序
其他
- 四舍五入
- 取余
- 取值
- 取小数点后几位
react
- react hooks
- 底层原理
- 优化
vue
- mvvm
- vue2 3 的区别
- netTick
- 双向绑定
- 生命周期