在我提供我的 JavaScript 文件之前type="module",我可以在我用来返回它们的同一语句中定义我的变量。例子:function formatNameForFile(name) { return formattedName = name.toLowerCase().replace(/ /g, '-');}然而,一旦我添加type="module"到我的 JavaScript 文件中,我收到以下引用错误:Uncaught ReferenceError: formattedName is not defined我可以通过在返回变量之前明确定义我的变量来消除这些错误,如下所示:function formatNameForFile(name) { const formattedName = name.toLowerCase().replace(/ /g, '-'); return formattedName;}为什么是这样?这些变量是否仍然可以通过初始 return 语句访问,只要它们在其中绑定(使用const、var或)?let
1 回答
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
ES6 模块总是严格的。
JavaScript 模块的全部内容自动处于严格模式,无需声明即可启动它。
在严格模式下,当您尝试分配给尚未定义的变量时,会抛出错误:
'use strict'; something = 'foo';
这就是您的模块中发生的事情。由于变量名称尚未在函数内部或其任何父范围内的任何位置定义,因此会引发错误。
只要这些变量在其中绑定(使用 const、var 或 let),难道它们仍然可以通过初始 return 语句访问吗?
当然可以,但是您不能引用或分配给尚未初始化的变量。
但是没有必要创建一个您将立即返回的变量。如果你愿意,你可以做
const formatNameForFile = name => name.toLowerCase().replace(/ /g, '-');
添加回答
举报
0/150
提交
取消