为了账号安全,请及时绑定邮箱和手机立即绑定

ES6 模块:必须在返回变量之前显式定义变量吗?

ES6 模块:必须在返回变量之前显式定义变量吗?

慕妹3242003 2023-03-24 16:22:01
在我提供我的 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, '-');


查看完整回答
反对 回复 2023-03-24
  • 1 回答
  • 0 关注
  • 53 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信