最后
小编综合了阿里的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
虽只说了一个公司的面试,但我们可以知道大厂关注的东西并举一反三,通过一个知识点延伸到另一个知识点,这是我们要掌握的学习方法,小伙伴们在这篇有学到的请评论点赞转发告诉小编哦,谢谢大家的支持!
2.this在箭头函数中的使用:在嵌套函数中,碰到setInterval, setTimeout等定时器函数时,this会发生漂移,指向windows(global对象),以前我们要将this缓存var self = this;或者通过(){}.bind(this)来改变this的内部函数的指向,但是有了箭头函数后,再也不用更担心这个问题了;
3.函数默认参数,以前的函数默认参数 var a = a || [];但是ES6支持了函数的默认参数;
4.rest参数…,rest参数是没有指定变量名的参数数组,而arguments是所有参数的集合。而且arguments参数不是一个真正的数组,而rest参数是一个真的数组,可以调用sort和map方法。可以告别arguments参数了;
1.3.展开符操作
…可以用于函数的调用,数组字面量,以及对象的展开(ES7).
1.4.模板字符串
用反引号标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。模板字符串中嵌入变量,需要将变量名写在${}
之中。
// 字符串中嵌入变量
var name = "Bob", time = "today";
Hello {name}, how are you {time}?
1.5 解构赋值
解构方法可以很快的从数组或者对象中提取变量,可以用一个表达式读取整个解构;
1.6 类
JavaScript是原型继承的,但声明起来却很怪,所有提供了一个原型链的class语法糖。通过class
关键字定义了一个“类”,可以看到里面有一个constructor
方法,这就是构造方法,而this
关键字则代表实例对象。constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。
注意,定义“类”的方法的时候,前面不需要加上function
这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。类的数据类型就是函数,类本身就指向构造函数。
Class之间可以通过extends
关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。
子类必须在constructor
方法中调用super
方法,否则新建实例时会报错。这是因为子类没有自己的this
对象,而是继承父类的this
对象,然后对其进行加工。如果不调用super
方法,子类就得不到this
对象。另一个需要注意的地方是,在子类的构造函数中,只有调用super
之后,才可以使用this
关键字,否则会报错。这是因为子类实例的构建,是基于对父类实例加工,只有super
方法才能返回父类实例。
super
这个关键字,既可以当作函数使用,第一种情况,super
作为函数调用时,代表父类的构造函数。第二种情况,super
作为对象时,指向父类的原型对象。可以采用super(). + 方法名字来调用父类的方法。
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static
关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
1.7 模块
1.首先推出Require.js的AMD规范,Node.js诞生后,随之而来的是CommonJS格式,后来的browerify,知道es6推出了模块化,对模块化进行了支持;
es6模块功能主要由两个命令构成:export
和import
。export
命令用于规定模块的对外接口,import
命令用于输入其他模块提供的功能。通过as取别名。
export {firstName, lastName, year};
import {firstName, lastName, year} from './profile';
function setName(element) {
element.textContent = firstName + ' ' + lastName;
}
1.8 使用Babel
各种方案层出不穷,JavaScript不断发展,导致很多性能无法普及,babel提供了JavaScript多用途编译器。让你可以开心的使用ES6.
Babel通过安装插件(plugin)或者预设(preset,就是一组设定好的插件)来编译代码。创建一个.babelrc文件。
{
"presets":[],
"plugins":[]
}
2.Component组件与模块化
首先要明白两个概念:模块(module)和组件(component),模块是指的语言层面的,在前端大多数指的是一个JavaScript模块,往往变现为一个JavaScript文件,以及其对外暴露的一些属性和方法。组件更偏向于业务层面,往往是一个独立功能的实现,比如一个下拉菜单,文本编辑器,路由系统等。一个组件往往包括其所需的所有资源,包括逻辑js,样式css,模板html(template),甚至图片和文字。
2.1模块化方案的阶段
1.全局变量+命名空间:
避免污染全局作用域,模块内部通常用匿名自执行函数。问题多多:(1)依赖全局变量,污染全局变量的同时,不安去.(2)依赖约定的命名空间,不可靠。(3)要手动管理并控制执行,容易出错,在上线前要手动合并一些模块
2.AMD+CommonJs
解决时上述的问题,全局下定义require和define,不需要其他变量
通过文件路径或模块声明来定义模块
依赖与加载都是由加载器完成,提供了打包工具自动分析依赖并合并
3.ES6模块化
最后
其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)
《前端开发四大模块核心知识笔记》
最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。