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