猿问

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

在我提供我的 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


慕妹3242003
浏览 73回答 1
1回答

qq_遁去的一_1

ES6 模块总是严格的。JavaScript 模块的全部内容自动处于严格模式,无需声明即可启动它。在严格模式下,当您尝试分配给尚未定义的变量时,会抛出错误:'use strict';  something = 'foo';这就是您的模块中发生的事情。由于变量名称尚未在函数内部或其任何父范围内的任何位置定义,因此会引发错误。只要这些变量在其中绑定(使用 const、var 或 let),难道它们仍然可以通过初始 return 语句访问吗?当然可以,但是您不能引用或分配给尚未初始化的变量。但是没有必要创建一个您将立即返回的变量。如果你愿意,你可以做const formatNameForFile = name => name.toLowerCase().replace(/ /g, '-');
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答