我甚至不知道该怎么称呼它所以不确定如何正确地提出这个问题。什么是运营商,它在做什么?我假设它只是将函数表达式作为回调传递,但语法对我来说是新的。
(错误)=>
fs.writeFile('message.txt', 'Hello Node.js', (err) => {
if (err) throw err;
console.log('It\'s saved!');
});
答案 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!');
});
无论如何,语法之间存在很大差异:function
为this
创建新范围时,箭头函数会重新使用外部范围。因此,在使用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!');
}