现代 JavaScript 教程 — 箭头函数基础知识

箭头函数,基础知识

建立函数还有另一种很是简单的语法,而且这种方法一般比函数表达式更好。javascript

它被称为“箭头函数”,由于它看起来像这样:html

let func = (arg1, arg2, ...argN) => expression
复制代码

……这里建立了一个函数 func,它接受参数 arg1..argN,而后使用参数对右侧的 expression 求值并返回其结果。java

换句话说,它是下面这段代码的更短的版本:react

let func = function(arg1, arg2, ...argN) {
  return expression;
};
复制代码

让咱们来看一个具体的例子:express

let sum = (a, b) => a + b;

/* 这个箭头函数是下面这个函数的更短的版本: let sum = function(a, b) { return a + b; }; */

alert( sum(1, 2) ); // 3
复制代码

能够看到 (a, b) => a + b 表示一个函数接受两个名为 ab 的参数。在执行时,它将对表达式 a + b 求值,并返回计算结果。微信

  • 若是咱们只有一个参数,还能够省略掉参数外的圆括号,使代码更短。函数

    例如:学习

    let double = n => n * 2;
    // 差很少等同于:let double = function(n) { return n * 2 }
    
    alert( double(3) ); // 6
    复制代码
  • 若是没有参数,括号将是空的(但括号应该保留):spa

    let sayHi = () => alert("Hello!");
    
    sayHi();
    复制代码

箭头函数能够像函数表达式同样使用。code

例如,动态建立一个函数:

let age = prompt("What is your age?", 18);

let welcome = (age < 18) ?
  () => alert('Hello') :
  () => alert("Greetings!");

welcome(); // 如今好了
复制代码

一开始,箭头函数可能看起来并不熟悉,也不容易读懂,但一旦咱们看习惯了以后,这种状况很快就会改变。

箭头函数对于简单的单行动做来讲很是方便,尤为是当咱们懒得打太多字的时候。

多行的箭头函数

上面的例子从 => 的左侧获取参数,而后使用参数计算右侧表达式的值。

但有时咱们须要更复杂一点的东西,好比多行的表达式或语句。这也是能够作到的,可是咱们应该用花括号括起来。而后使用一个普通的 return 将须要返回的值进行返回。

就像这样:

let sum = (a, b) => {  // 花括号表示开始一个多行函数
  let result = a + b;
  return result; // 若是咱们使用了花括号,那么咱们须要一个显式的 “return” 
};

alert( sum(1, 2) ); // 3
复制代码

更多内容

在这里,咱们赞赏了箭头功能的简洁性。但还不止这些!

箭头函数还有其余有趣的特性。

为了更深刻地学习它们,咱们首先须要了解一些 JavaScript 其余方面的知识,所以咱们将在后面的 深刻研究箭头函数 一章中再继续研究箭头函数。

如今,咱们已经能够用箭头函数进行单行操做和回调了。


总结

对于一行代码的函数来讲,箭头函数是至关方便的。它具体有两种:

  1. 不带花括号:(...args) => expression — 右侧是一个表达式:函数计算表达式并返回其结果。
  2. 带花括号:(...args) => { body } — 花括号容许咱们在函数中编写多个语句,可是咱们须要显式地 return 来返回一些内容。

做业题

先本身作题目再看答案。

用箭头函数重写

重要程度:⭐️⭐️⭐️⭐️⭐️

用箭头函数重写下面的函数表达式:

function ask(question, yes, no) {
  if (confirm(question)) yes()
  else no();
}

ask(
  "Do you agree?",
  function() { alert("You agreed."); },
  function() { alert("You canceled the execution."); }
);
复制代码

答案

function ask(question, yes, no) {
  if (confirm(question)) yes()
  else no();
}

ask(
  "Do you agree?",
  () => alert("You agreed."),
  () => alert("You canceled the execution.")
);
复制代码

是否是看起来精简多了?

本文首发于在微信公众号「技术漫谈」,欢迎关注。


现代 JavaScript 教程:开源的现代 JavaScript 从入门到进阶的优质教程。React 官方文档推荐,与 MDN 并列的 JavaScript 学习教程

在线免费阅读:zh.javascript.info


扫描下方二维码,关注微信公众号「技术漫谈」,订阅更多精彩内容。

相关文章
相关标签/搜索