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)
这是一个所谓的箭头功能.它是定义函数表达式的简短形式.因此,
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)
无论如何,这仅在只有一个参数时才有效.