mik*_*ski 1 javascript es6-modules
在提供 JavaScript 文件之前type="module",我可以在用于返回变量的同一语句中定义变量。
例子:
function formatNameForFile(name) {
return formattedName = name.toLowerCase().replace(/ /g, '-');
}
Run Code Online (Sandbox Code Playgroud)
但是,当我添加type="module"到 JavaScript 文件后,我收到了以下引用错误:
Uncaught ReferenceError: formattedName is not defined
Run Code Online (Sandbox Code Playgroud)
我可以通过在返回变量之前显式定义变量来消除这些错误,如下所示:
function formatNameForFile(name) {
const formattedName = name.toLowerCase().replace(/ /g, '-');
return formattedName;
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样?只要这些变量在其中绑定(使用const、var或),是否仍然可以通过初始 return 语句访问这些变量?let
ES6 模块始终是严格的。
JavaScript 模块的全部内容自动处于严格模式,无需任何语句来启动它。
在严格模式下,当您尝试分配给尚未定义的变量时,会引发错误:
'use strict';
something = 'foo';Run Code Online (Sandbox Code Playgroud)
这就是您的模块中发生的情况。由于变量名尚未在函数内或其任何父作用域中的任何位置定义,因此会引发错误。
只要这些变量在其中绑定(使用 const、var 或 let),是否仍然可以通过初始 return 语句访问这些变量?
当然可以,但是您不能引用或分配尚未初始化的变量。
但无需创建要立即返回的变量。如果你愿意,你可以做
const formatNameForFile = name => name.toLowerCase().replace(/ /g, '-');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |