首页 > 其他分享 >箭头函数

箭头函数

时间:2024-06-11 15:15:04浏览次数:19  
标签:function return 函数 箭头 var id

基本用法

ES6 允许使用“箭头”(=>)定义函数。

var f = v => v;

var f = function (v) {
    return v;
};

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

var f = () => 5;
// 等同于
var f = function () { return 5 };

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
    return num1 + num2;
};

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用 return 语句返回。

 

由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。

// 报错
let getTempItem = id => { id: id, name: 'Temp' };

// 不报错
let getTempItem = id => ({ id: id, name: 'Temp' });

下面是一种特殊情况,虽然可以运行,但会得到错误的结果。

let foo = () => { a: 1 }
foo() // undefined

上面代码中,原始意图是返回一个对象 { a: 1 },但是由于引擎认为大括号是代码块,所以执行了一行语句 a: 1。这时,a 可以被解释为语句的标签,因此实际执行的语句是 1; ,然后函数就结束了,没有返回值。

 

如果箭头函数只有一行语句,且不需要返回值,可以采用下面的写法,就不用写大括号了。

let fn = () => void doesNotReturn();

箭头函数可以与变量结构结合使用。

const full = ({ first, last }) => first + ' ' + last;

// 等同于
function full(person) {
  return person.first + ' ' + person.last;
}

箭头函数使得表达更加简洁。

const isEven = n => n % 2 === 0;
const square = n => n * n;

箭头函数的一个用处是简化回调函数。

// 普通函数写法
[1, 2, 3].map(function (x) {
   return x * x; 
});

// 箭头函数写法
[1, 2, 3].map(x => x * x);

另一个例子是

// 普通函数写法
var result = values.sort(function (a, b) {
    return a - b;
});

// 箭头函数写法
var result = values.sort((a, b) => a - b);

下面是 rest 参数与箭头函数结合的例子。

const numbers = (...nums) => nums;

numbers(1, 2, 3, 4, 5)
// [1, 2, 3, 4, 5]

const headAndTail = (head, ...tail) => [head, tail];
// [1, [2, 3, 4, 5]]

使用注意点

箭头函数有几个使用注意点。

(1)箭头函数没有自己的 this 对象。

(2)不可以当作构造函数,也就是说,不可以对箭头函数使用 new 命令,否则会抛出一个错误。

(3)不可以使用 arguments 对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

(4)不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。

上面四点中,最重要的是第一点。对于普通函数来说,内部的 this 指向函数运行时所在的对象,但是这一点对箭头函数不成立。它没有自己的 this 对象,内部的 this 就是定义时上层作用域中的 this 。也就是说,箭头函数内部的 this 指向是固定的,相比之下,普通函数的 this 指向是可变的。

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

var id = 21;

foo.call({ id: 42 });
// id: 42

上面代码中,setTimeout() 的参数是一个箭头函数,这个箭头函数的定义生效是在 foo 函数生成时,而它的真正执行要等到 100 毫秒后。如果是普通函数,执行时 this 应该指向全局对象 window ,这时应该输出 21 。但是,箭头函数导致 this 总是指向函数定义生效时所在的对象(本例是 { id: 42 } ),所以打印出来的是 42。

 

标签:function,return,函数,箭头,var,id
From: https://www.cnblogs.com/ladybug7/p/18242046

相关文章

  • C# 字段 属性 方法 构造函数 索引器 事件 嵌套类型 常量 运算符重载
    字段声明字段字段初始化静态字段常量字段只读字段字段的访问然而属性声明属性自动实现的属性只读属性只写属性属性的逻辑处理属性的访问修饰符属性和字段的区别属性的用途总结索引器索引器的基本语法使用索引器索引器的关键点语法参数访问和设置异常处理性能重载使用......
  • 如果引用另一个文件函数
    提问Rust如果引用另一个文件函数回答使用pubpubfnfib(n:u32)->u32{returnifn<2{n}else{fib(n-1)+fib(n-2)}}参考https://rustwiki.org/zh-CN/book/ch07-05-separating-modules-into-different-files.html#:~:text=Rust......
  • C/C++单元测试如何解决非虚函数对象依赖
    如何解决非虚函数对象依赖随着事物的接触越来越多,了解的越来越深入,我们总会发现一些新的问题或者不足。就像前文提到的一样,我们在面对有对象的虚函数依赖的时候,可以使用gmock框架来为我们提供方便的模拟期望值,以便我们能撇除外界的影响(依赖)从逻辑上设计单元测试并持续的......
  • 【JavaScript】内置对象 - 字符串对象 ⑦ ( String 字符串替换 | replace 函数 | repl
    文章目录一、String字符串替换1、replace函数替换字符串2、使用replace函数替换所有匹配字符串3、replaceAll函数替换字符串二、String字符串转数组1、split函数切割字符串2、代码示例-切割字符串String字符串对象参考文档:https://developer.mozilla.......
  • 流畅的python--第十章 使用一等函数实现设计 模式
    经典的策略模式示例10-1实现Order类,支持插入式折扣策略fromabcimportABC,abstractmethodfromcollections.abcimportSequencefromdecimalimportDecimalfromtypingimportNamedTuple,OptionalclassCustomer(NamedTuple):name:strfidelity:intcl......
  • [快速阅读七] Halcon里emphasize函数相关资料.
    时不时有人问我我的SSE优化Demo里emphasize(边缘强调)的原理是啥,有没有写博客,其实不是我不愿意写博客,而是那个东西太过于简单,我不想写博客。但是耐不住问的人多了,我就干脆复制点资料放在博客里吧,省的每次我还要去找点资料复制给人家。这个东西其实是Halcon里的一个算子,我......
  • 封装线程池相关函数
    thread_pool.c线程要执行的任务/*******************************************************************************************@name:routine* @function:线程要执行的任务*@paramsv:None*@retval:None*@author:Dazz*@d......
  • 【JS封装-兼容IE(较旧版本如IE8及以下)】强化编程实践:精选JavaScript函数封装集锦-添加E
    目录添加Event监听获取非行间样式JSON.parse与JSON.stringifyquerySelector与querySelectorAll的兼容支持跨浏览器的classList操作兼容性处理console.log兼容性处理forEach方法Promise的兼容性处理FetchAPI的兼容性处理添加Event监听IE8及以下版本不支持addEvent......
  • 服务器IO多路复用的select和poll的区别以及监听套接字select函数的四个宏操作
    目录知识补给站对文件描述符集合操作的四个宏操作服务器IO多路复用中的select和poll的区别知识补给站对文件描述符集合操作的四个宏操作对文件描述符集合操作的四个宏操作在select函数中起着关键的作用,它们用于初始化、添加、删除和检查文件描述符集合中的元素。这四个宏为:FD_......
  • 高级函数
    reduce#倒序lists=[2,5,2,4,7]print(sorted(lists,reverse=True))filter#过滤序列,过滤掉不符合条件的元系defget_data(x):returnx%2==0#查询1-100的偶数print(list(filter(get_data,range(1,101))))reduce对序列中的元素进行案计计算fromfunctoolsimportreduce......