Javascript语法。这是什么:“,(错误)=> {}”?

时间:2016-05-22 18:32:50

标签: javascript node.js

我甚至不知道该怎么称呼它所以不确定如何正确地提出这个问题。什么是运营商,它在做什么?我假设它只是将函数表达式作为回调传递,但语法对我来说是新的。

(错误)=>

fs.writeFile('message.txt', 'Hello Node.js', (err) => {
  if (err) throw err;
  console.log('It\'s saved!');
});

2 个答案:

答案 0 :(得分:5)

这是一个所谓的arrow function。它是定义函数表达式的简短形式。因此,

fs.writeFile('message.txt', 'Hello Node.js', (err) => {
  if (err) throw err;
  console.log('It\'s saved!');
});

基本类似于:

fs.writeFile('message.txt', 'Hello Node.js', function (err) {
  if (err) throw err;
  console.log('It\'s saved!');
});

无论如何,语法之间存在很大差异:functionthis创建新范围时,箭头函数会重新使用外部范围。因此,在使用function关键字定义的回调中,您可能需要诸如

之类的内容
const that = this;

保留外部范围,使用您不需要的箭头功能。请注意,这也意味着您无法使用带有箭头功能的bind(即,无法为箭头功能重新定义this(好吧,为真,你可以使用它,但第一个参数不会产生任何影响))。

除此之外,请注意,如果只有一个参数,您可以省略参数周围的括号。因此,而不是

fs.writeFile('message.txt', 'Hello Node.js', (err) => {
  if (err) throw err;
  console.log('It\'s saved!');
});

你也可以写:

fs.writeFile('message.txt', 'Hello Node.js', err => {
  if (err) throw err;
  console.log('It\'s saved!');
});

无论如何,这仅在只有一个参数的情况下才有效。

答案 1 :(得分:0)

这是ES6的箭头函数(或lambda)语法。查看this MDN article

它确实是一个回调,它接受一个名为err的参数。

在您的情况下,它在语义上等同于以下内容:

function(err) {
  if (err) throw err;
  console.log('It\'s saved!');
}