在回调中给出意外值的胖箭头函数的“参数”的值

时间:2016-11-05 08:07:24

标签: javascript node.js ecmascript-6

请参阅以下代码段:

代码段#1:

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

Snippet#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 会执行并记录console.log(arguments)的一些意外值,但console.log(error, data)会记录正确的值;值(error, data)

为什么以及为Snippet#1记录的值是什么?

2 个答案:

答案 0 :(得分:10)

  

没有参数绑定

     

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

From: MDN - Arrow functions

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

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

答案 1 :(得分:5)