JavaScript普通函数与箭头函数有怎样的区别?

硅谷探秘者 Md 前端,javascript 911 0 0
比较点 普通函数 箭头函数
简写 箭头函数如果没有参数,同时函数体的返回值只有一句,则{}和return都可以省略。
this指向 this总是指向调用它的对象,如果作为构造函数,它指向创建的对象实例 箭头函数的this指向的是父级作用域的this,是通过查找作用域链来确定 this 的值,也就是说看的是上下文的this,指向的是定义它的对象,而不是使用时所在的对象。
this改变 call()、apply()、bind()等方法能改函数中this的指向 call()、apply()、bind()等方法不能改变箭头函数中this的指向
构造函数 可以作为构造函数,用来创建对象实例 箭头函数不能作为构造函数使用
arguments对象 每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。 箭头函数没有自己的arguments,取而代之用rest(剩余)参数…arg来解决
prototype原型 具有prototype 没有prototype原型

重要特性

1、箭头函数没有 arguments

// 1、普通函数中的arguments正确使用:
function foo(n) {
    // 隐式绑定 foo函数的参数 与 arguments对象. 
    // arguments[0] 表示传给foo函数的第一个参数,也就是n
    var f = () => arguments[0] + n;
    return f();
}
foo(1); // 2
foo(3); // 6
foo(3, 2);//6

// 2、箭头函数中无法使用arguments
// ReferenceError: arguments is not defined
var func = (a, b) => {
    return arguments[0];
}

2、箭头函数没有prototype属性


var Foo = () => {};
console.log(Foo.prototype); // undefined

3、箭头函数不能使用new

箭头函数没有this,不能用作构造函数,也就无法使用 new

var Foo = () => {};
var foo = new Foo(); // TypeError: Foo is not a constructor

4、箭头函数没有this

普通函数、对象方法中的this,都是在运行时定义。

  • 普通函数的this 等于 undefined,无法调用;

  • 对象方法的this,指向对象本身。

  • 箭头函数,不会定义自己的this,它只会继承自己上一层作用域的this。


评论区
请写下您的评论...
暂无评论...
猜你喜欢
数据库基础 2525 sql中常用
weblog 2263 值类型//(*MethodPointer)声明一个指针//(inta,intb)只能指向两个int类型typedefint(*MethodPointer)(inta,intb);intadd
数据库 3782 如下据:mysqlselect*fromarea;+----+----------------+----------------+-----------+-----------+|id
数据库 790 语法:YEARWEEK(date)或YEARWEEK(date,firstdayofweek)参值date:需要。从中提取年和周日期或日期时间值firstdayofweek:可选,指定星期几
weblog 6187 ://photo.jiajiajia.club/item/a-star.htmlDijkstra算法最佳优先搜索在了解a*算法之前相信您已经对这两个算法所了解Dijkstra算法是典型最短路径算法,用于计算一个节点到其他节点
weblog 1763 SelectORD(‘a’)-:973.CONV(N,from_base,to_base)对字n进制转换,并转换为字串返回,N是要转换据,from_base是原进制,to_base是目标进制。selectCO
数据库基础 1979 '%from_str%'说明:table_name——表名字field_name——字段名from_str——需要替换字符串to_str——替换成字符串
javascript,前端 788 jsjavascriptforin和forof,forof遍历原理 一、 forin是ES5语法,forof是ES6语法forin是无序遍历组或对象,也就是随机遍历,不按照顺序来
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。