
大家好,我是zz,相信大家平时在码代码中,都知道箭头函数的用法,但是在面试中,让他讲讲箭头函数的用法,都讲的很片面,通过阅读本文,我们带大家系统的总结下箭头函数,形成自己的箭头函数的知识结构,这样在面试是面试官问到就小菜一碟。
箭头函数定义包括一个参数列表(零个或多个参数,如果参数个数不是一个的话要用 ( .. ) 包围起来),然后是标识 =>,函数体放在最后。
箭头函数
let arrowSum = (a, b) => {
return a + b
}
复制代码普通函数
let zz = function(a, b){
return a + b
}
复制代码我们打印fn函数的原型,我们会发现箭头函数本身没有this;
var fn = (a, b) => {
console.log(this, fn.prototype);
//window, undefined
var fn2 = () => {
console.log(this, '测试');
// window
};
fn2();
}
fn()
复制代码箭头函数的arguments 我们会发现这样写会报语法错误
var fn = (a) => {
console.log(a.arguments)
}
fn();
//ReferenceError: arguments is not defined
复制代码我们换一种情况,我们看代码会发现箭头函数argemnets指向了上一个函数
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this。
var z = function(a){
console.log(arguments);
bb();
function bb() {
console.log(arguments);
let ac = () => {
console.log(arguments);
//arguments 指向第二层函数
};
ac();
}
}
z()
复制代码1. 通过构造函数调用
let Foo = () => {
}
let result = new Foo();
//TypeError: Foo is not a constructor
复制代码2. 需要使用prototype
let foo = () => {
}
console.log(foo.prototype)
//underfind
复制代码3. 没有super
连原型都没有,自然也不能通过 super 来访问原型的属性,所以箭头函数也是没有 super 的,不过跟 this、arguments、new.target 一样,这些值由外围最近一层非箭头函数决定
关于this arguments 和 super 的词法绑定。这是利用es6的特性来修正一些常见的问题,而不是bug或者错误。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。