2016-05-22 62 views
0

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

(ERR)=>

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

ES5新箭头函数的语法 点击此处查看 https://babeljs.io/repl/ –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#Arrow_functions – Sirko

+0

你也可以省略'err'的大括号:'err => console.error(err)' –

回答

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!'); 
}); 

反正有bitween的语法很大的区别:虽然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!'); 
}); 

无论如何,这只是工作,如果只有一个参数。

0

这是ES6的箭头功能(或λ)的语法。退房this MDN article

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

在你的情况下,它是语义上等效于以下内容:

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

它的语义**不等同于**。 “箭头”功能与“这个”不同。 –

+0

...和函数作用域变量不适用于它们。 – metarmask

+1

Woops,你说得对。我不会深入细节,但已经编辑了我的答案,指定它只在这个特定情况下是等价的。 – Aaron