主要问了些做过的项目,以及技术点,很容易就回答上来了,感觉比较容易,面过了技术就是hr面,还是很有效率的。
面试官问的面试题: 1.1 函数声明 //ES5function getSum(){}function (){}//匿名函数//ES6()=>{}//如果{}内容只有一行{}和return关键字可省, 1.2 函数表达式(函数字面量) //ES5var sum=function getSum(){}//ES6let sum=()=>{}//如果{}内容只有一行{}和return关键字可省, 1.3 构造函数 var sum=new GetSum(num1,num2) 1.4 三种方法的对比
1.函数声明有预解析,而且函数声明的优先级高于变量;
2.使用Function构造函数定义函数的方式是一个函数表达式,这种方式会导致解析两次代码,影响性能。第一次解析常规的Java代码,第二次解析传入构造函数的字符串
2.ES5中函数的4种调用
在ES5中函数内容的this指向和调用方法有关
2.1 函数调用模式
包括函数名()和匿名函数调用,this指向window
function getSum() { console.log(this) //window } getSum() (function() { console.log(this) //window })() var getSum=function() { console.log(this) //window } getSum()2.2 方法调用
对象.方法名(),this指向对象
var objList = { name: 'methods', getSum: function() { console.log(this) //objList对象 }}objList.getSum()2.3 构造器调用
new 构造函数名(),this指向构造函数
function Person() { console.log(this); //指向构造函数Person}var personOne = new Person();2.4 间接调用
利用call和apply来实现,this就是call和apply对应的第一个参数,如果不传值或者第一个值为null,undefined时this指向window
function foo() { console.log(this);}foo.apply('我是apply改变的this值');//我是apply改变的this值foo.call('我是call改变的this值');//我是call改变的this值3.ES6中函数的调用
箭头函数不可以当作构造函数使用,也就是不能用new命令实例化一个对象,否则会抛出一个错误
箭头函数的this是和定义时有关和调用无关