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

箭头函数的格式:
1.只包含表达式,连{…}和return都省略掉了

var fn = x => x*x;

2.包含多条语句,这个时候就不不能省略{…}

//单个参数
x => { if(x > 0){
  return x * x;
}else{
  return x;
}
}
//参数不是一个需要用括号括起来
(x,y) => return x*y;

箭头函数在定义之后,this的值就不会发生改变,无论用什么方式调用它,this的值都不会发生改变。
其原因在于:箭头函数不会自动绑定局部变量,如this,arguments,super(ES6),new.target(ES6)等。所以箭头函数没有它自己的this的值,箭头函数内的this的值继承自外围作用域。在箭头函数中调用this时,仅仅是简单的沿着作用域链向上寻找,找到最近一个this的值拿来使用。

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

1.箭头函数相当于匿名函数,是不能作为构造函数的,不能使用new

var B = ()=>{
  value:1;
}
var b = new B();//Uncaught TypeError: B is not a constructor

2.箭头函数不绑定arguments,取而代之用rest参数…解决

function A(a){
  console.log(arguments);
  //Arguments [2, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}
var B = (b) =>{
  console.log(arguments);
  //ReferenceError: arguments is not defined
}
var C = (...c)=>{//...c即为rest的参数
  console.log(c);//[2]
}
A(2);
B(2);
C(2);

3.箭头函数会捕获其所在上下文的this值,作为自己的this值。即箭头函数的作用域会继承自外围的作用域。

var obj = {
  a:10,
  b:function(){
   console.log(this.a);//10
 }
 c:function(){
   return ()=>{
          console.log(this.a);//10
   }
 }
}
obj.b();
obj.c()();

4.箭头函数当方法使用的时候没有定义this的绑定

obj = {
  a:10,
  b:()=>{
    console.log(this.a);//undefined
    console.log(this);//window
  },
  c:function(){
    return ()=>{
      console.log(this.a);//10
    }
  }
}
obj.b();
obj.c();

b箭头函数运行时的外围环境是全局作用域,this指向了window
c内部返回的箭头函数运行在c函数内部,其外围的作用域是外部函数的作用域,外部函数的this值指向调用它的obj,所以输出的值是10

5.使用call()和apply()调用
通过call()或者apply()调用一个函数时,只是传入参数而已,对this并没有影响。

var obj = {
  a:10,
  b:function(n){
   var f = (v) => v + this.a;
   var c = {a:20};
   return f.call(c,n);
 }
}
console.log(obj.b(1));//11

6.箭头函数没有函数原型

var a = ()=>{
  return 1;
}
function b(){
  return 2;
}
console.log(a.prototype);//undefined;
console.log(b.prototype);//object{...}

7.箭头函数不能当做Generator函数,不能使用yield关键字
8.箭头函数不能换行

var a = () 
          => 1;//SyntaxError:Unexpected token
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
箭头函数普通函数在语法和功能上有一些区别。 1. 语法简洁性:箭头函数使用箭头(=>)来定义,省略了`function`关键字和大括号。如果函数体只有一条语句,箭头函数可以省略`return`关键字,并且自动返回该语句的结果。例如: ```javascript // 普通函数 function add(a, b) { return a + b; } // 箭头函数 const add = (a, b) => a + b; ``` 2. `this`的指向:箭头函数没有自己的`this`绑定,它会继承外层作用域的`this`。而普通函数的`this`指向调用它的对象或者全局对象(在严格模式下为`undefined`)。 ```javascript // 普通函数 const obj = { name: 'Alice', sayHello: function () { console.log(`Hello, ${this.name}`); } }; obj.sayHello(); // 输出: Hello, Alice // 箭头函数 const obj = { name: 'Alice', sayHello: () => { console.log(`Hello, ${this.name}`); } }; obj.sayHello(); // 输出: Hello, undefined ``` 3. 构造函数箭头函数不能用作构造函数,不能使用`new`关键字创建实例。普通函数可以用作构造函数,并且可以创建实例对象。 ```javascript // 普通函数 function Person(name) { this.name = name; } const alice = new Person('Alice'); console.log(alice.name); // 输出: Alice // 箭头函数 const Person = name => { this.name = name; }; const alice = new Person('Alice'); // 报错: Person is not a constructor ``` 总的来说,箭头函数更适合简单的、短小的函数,而普通函数则更灵活,适用于各种场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值