掘友等级
获得徽章 0
【点线面体】
如果把世界抽象成为点线面体,那么很多事情,大多数人能看到点,有些人能看到线,更少的人能看到面,极少的人能看到体。
就工程师成长之路而言,如果能找到和自己相关的模块并实现功能,那就是看到了点,此时就是合格的初级工程师,对标阿里 p5。
如果能把整个链路的业务流程理顺并跑通产品,那就是看到了线,此时能成为高级工程师,对标阿里 p6。
如果能在某个域独当一面,横跨多个业务线,纵向又能做到业务知识和技术体系的精深,那就是看到了面,此时就有技术专家的资质,对标阿里 p7。
如果从无到有的建设核心产品或者有效推动跨域方案落地,全方位视角进行架构的改进升级,那就是看到了体,已经称得上是高级技术专家,对标阿里 p8。
所以,有效成长的方式就是纵向精深和横向扩展,体系化的建设自己的架构,而不是留下散乱的点,平行的线和单调的面。
闭包经典面试题,原来还可以用arguments.callee来实现

类数组转数组有很多种方式
一图胜千言


但是在使用splice这种方式转换的时候,需要注意的是像HTMLCollection、NodeList等这类型的类数组时,因为它们的length 属性为只读,而splice 底层还是会修改 length 的长度,所以在转换的时候会报错,见下图示例
如果一眼就能看出以下这些值的返回结果,那类型转换应该就攻克了

关于bind的几个特别需要注意的点1、bind的返回的函数能够用作构造函数,也就是说可以使用new 操作符来创建对象,但是bind时提供的this值会失效,但传入的参数依旧生效
2、bind的constructor无需特别考虑
3、bind返回的函数没有prototype
4、只有函数才能调用bind
Object.create 的模拟实现原来这么简单
Object.create = function( o ) {
function f(){}
f.prototype = o;
return new f;
};
call原理其实就是给指定对象新增属性,属性值为当前执行的函数,执行完函数后删除新增属性
实现当中需要注意的几点:
1、新增属性保证与之前对象上的属性不冲突,不存在覆盖的情况
2、考虑传入的参数,这个函数要被调用且有返回值
3、如果第一个参数是null或undefined的,则当前指向为window,如果第一个参数是基本数据类型的话,则指向的是此基本数据对应对应的包装类型
“在进入执行上下文时,首先会处理函数声明,其次会处理变量声明,如果如果变量名称跟已经声明的形式参数或函数相同,则变量声明不会干扰已经存在的这类属性。”
大家是这么说的,我怎么觉得我那样更容易理解?是这样么?求答案
下一页