callback中的胖箭头函数的“参数”值给出意想不到的值

看下面的片段:

片段#1:

let fs = require("fs"); fs.readFile(process.argv[2], "utf8", (error, data) => console.log(arguments)); 


片段#2:

 let fs = require("fs"); fs.readFile(process.argv[2], "utf8", (error, data) => console.log(error, data)); 


预期日志:( (error, data) ,例如:

null 'console.log("HELLO WORLD");\r\n'


当您尝试这两个片段时,您会发现片段1执行并logging一些console.log(arguments)意外值,但是console.log(error, data)logging正确的值; (error, data)

为什么以及代码段1中logging的值是什么?

没有参数的绑定

箭头函数不绑定参数对象因此,参数只是对封闭范围中的名称的引用。

来自:MDN – 箭头function

如果您希望在箭头函数中使用可变参数,请使用其余参数语法:

 fs.readFile(process.argv[2], "utf8", (...args) => console.log(args)); 

@Tamas被打上了,

但是,对于OP的小技巧,如果你想知道ES6等新的JavaScriptfunction在做什么。 我把代码粘贴到Babeljs.io中试一试。

例如。 你的代码 – >

https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=es2015%2Ces2015-loose%2Ces2016%2Ces2017%2Clatest%2Creact%2Cstage-0%2Cstage-1%2Cstage-2%2Cstage-3&code= fs.readFile(process.argv%5B2%5D%2C%20%22utf8%22%2C 20%(误差%2C%20data)%20%3D%3E%20console.log(参数))%3B%0D 0A%

然后@Tamas代码 – > https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=es2015%2Ces2015-loose%2Ces2016%2Ces2017%2Clatest%2Creact%2Cstage-0%2Cstage-1%2Cstage -2%2Cstage-3代码= fs.readFile(process.argv%5B2%5D%2C%20%22utf8%22%2C 20%(…参数)%20%3D%3E%20console.log(参数)) %3B