Javascript语法.这是什么:",(错误)=> {}"?

Rob*_*ers 0 javascript node.js

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

(错)=>

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

Gol*_*den 5

这是一个所谓的箭头功能.它是定义函数表达式的简短形式.因此,

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

基本上类似于:

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

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

const that = this;
Run Code Online (Sandbox Code Playgroud)

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

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

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

你也可以写:

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

无论如何,这仅在只有一个参数时才有效.