我正在编译一个看起来像这样的箭头函数:
const convertToSeconds = milliseconds => Math.round( milliseconds / 1000 );
function fixAllTimestamps( record ) {
if ( record.lastAccessTime ) { record.lastAccessTime = convertToSeconds( record.lastAccessTime ); }
if ( record.licenseExpires ) { record.licenseExpires = convertToSeconds( record.licenseExpires ); }
if ( record.lastModifiedAt ) { record.lastModifiedAt = convertToSeconds( record.lastModifiedAt ); }
if ( record.createdAt ) { record.createdAt = convertToSeconds( record.createdAt ); }
}
Babel似乎做对了,因为箭头函数转换为:
var convertToSeconds = function convertToSeconds(milliseconds) {
return Math.round(milliseconds / 1000);
};
但是,当我使用node运行此代码时,我得到了这个:
record.lastAccessTime = convertToSeconds(record.lastAccessTime);
^
TypeError: convertToSeconds is not a function
at fixAllTimestamps (test.js:109:29)
这是一个意想不到的结果。
要解决这个问题,我可以在源代码文件的顶部定义箭头函数,在以常规Javascript方式定义任何其他函数之前,或者我可以将箭头函数定义放在{ {1}}使它成为嵌套函数。
有人知道为什么节点会像这样失败,或者我的代码实际上有问题吗?
答案 0 :(得分:0)
这是因为您正在使用函数表达式而不是函数声明。如果使用函数声明,函数在文件中的顺序并不重要,如果使用函数表达式,则需要在使用之前定义函数。
而不是
"
待办事项
var convertToSeconds = function convertToSeconds(milliseconds) {
return Math.round(milliseconds / 1000);
};
查看我的代码示例:https://runkit.com/donuts/594352eb72a32300116d5d5e
我还想指出你的函数(function convertToSeconds(milliseconds) {
return Math.round(milliseconds / 1000);
};
)没有返回任何内容。我假设你希望它改变记录。
答案 1 :(得分:0)
因为您要为变量分配function expression,所以需要在使用它之前对其进行定义。如果您使用普通function declaration,则会获得hoisted,因此您可以在声明之前使用它。