真实面试中遇到的问题
近些日自出去面试出现了一些没有答出来的问题,于是写以此文,加深印象.
直接上问题吧,首先面试官问了我Es6的新语法:我回答的是 let const 箭头函数 promise async/await 结构赋值
其实完整为:
- let
- const
- 箭头函数
- 模板字符串
- 结构赋值
- promise
- import和export
- set方法
- 展开运算符
- async和await等
接来下面试官就顺着往下问了=>普通函数和箭头函数的区别 ===那我回答的是:普通函数的this指向与箭头函数的this指向不一致,普通函数this指向调用者,箭头函数的this指向与层函数作用域的this指向一致,如果没有就是指向window
完整回答为:
- 箭头函数的this指向与外层作用域的函数指向一致,如果没有就指向window
- 不能使用arguments对象
- 不能使用够造函数,就是说不能使用new命令
- 不可以使用yield命令,因此箭头函数不能用作Generator
面试官就顺着问,那普通函数的this指向怎么改,这里由于我没有准备好,就没有答出来
其实改变普通函数的this指向的方法有三种:bind call apply 都可以修改this指向
-
call 方法改变this指向
上面这段执行为:
当小林想借用老王的的方法的时候代码为:
-
apply方法改变this指向
输出结果也是一致:
-
bind方法改变this指向
当然输出结果也跟上面一致: