js中箭头函数和普通函数的区别

文章类型:Javascript

发布者:admin

发布时间:2023-03-28

在开发中,我们常用箭头函数,总结一下箭头函数和普通函数区别

一:外形不同

二:箭头函数都是匿名函数,普通函数具有函数名,也可以是匿名函数

// 普通函数
function func(){
// code
}

// 匿名函数
let func=function(){
// code
}

// 箭头函数
let func=()=>{
// code
}

三:箭头函数不能使用new,没有自己的this,且this指向外层的执行环境,不能改变,所以不能用于构造函数,普通函数可以通过new创建实例化对象,

function Person(name,age){
this.name=name;
this.age=age;
}
let admin=new Person("小白",22);

四:箭头函数this指向不同,本身不创建this,普通函数this指向调用对象,而箭头函数由此法作用域决定(上下文),不会发生变化,call()、apply()、bind()不会改变this指向

var webName="小白";
let func=()=>{
console.log(this.webName); //小白
}


五:箭头函数不绑定arguments,用rest...,接受的是一个数组

function A(a){
console.log(arguments);
}
let C = (...c) => {
console.log(c);
}

六:箭头函数不具有prototype对象

var a = ()=>{
return 1;
}

function b(){
return 2;
}

console.log(a.prototype); // undefined
console.log(b.prototype); // {constructor: ƒ}

七:箭头函数不具有super

八:箭头函数不具有new.target,允许你检测函数或构造方法是否是通过new运算符被调用的

function Foo() {
if (!new.target) throw "Foo() must be called with new";
console.log("Foo instantiated with new");
}

Foo(); // throws "Foo() must be called with new"
new Foo(); // logs "Foo instantiated with new"

九:箭头函数没有Generator函数,不能使用yeild关键字

 function* Generator() {
// 内部使用yield表达式——不会阻止代码向下运行
yield '我是第一个状态'
yield '我是第二个状态'
yield '我是第三个状态'

}
下一篇CSS中的FOUC